Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17104
  • 博文数量: 2
  • 博客积分: 145
  • 博客等级: 入伍新兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-23 13:47
文章分类

全部博文(2)

文章存档

2017年(1)

2016年(1)

我的朋友

分类: iOS平台

2016-01-13 19:24:34

  先移步本人的github主页:
查看openssl-ios-build-shell-script和curl-ios-build-shell-script这两个项目,
下载openssl-build.sh和curl-build.sh,并准备openssl, curl源码压缩包,下面正式开讲。

  iOS跨平台编译无非是要配置好编译器,SDK路径和最小支持的iOS版本,
还有开源项目本身要设置的一些选项,编译完了之后调用lipo合成
universal的库;
所谓自动编译,无非是在shell脚本里面调用这些里面用到一些命令,这就是基本原理。


说几个注意点:
1>. 
xcrun -sdk iphoneos --show-sdk-path / xcrun -sdk iphonesimulator --show-sdk-path用来查找真机和模拟器SDK的路径;

2>. 
xcrun --find gcc / xcrun --find clang用来查找编译器的路径;

3>. 
-miphoneos-version-min选项指定最小支持的iOS版本;

4>. 
-fembed-bitcode选项开启bitcode的支持,去掉就不支持bitcode;

5>. 编译curl,暂时只支持
gcc编译,虽然内部是调用clang,
我试了用clang编译,会报错:
error "We can't compile without socket() support!",若有人知道怎么解决,请告诉我;

6>. 编译完各平台的curl,直接使用同一份头文件,XCode会报错,说curlbuild.h里面的"
[CurlchkszEQ(long, CURL_SIZEOF_LONG)]"有问题,
这是因为32位和64位的curlbuild.h内容不一样,我们可以把32位和64位的curlbuild.h放在同一个目录下,重命名为curlbuild-32.h和curlbuild-64.h
然后机智地建一个curlbuild.h,里面通过"
__LP64__"宏来确定是否是64位的平台来包含不同的头文件;

7>. 编译openssl,需要导出
CROSS_TOP和CROSS_SDK两个变量,这两个变量合起来就是SDK的绝对路径;

8>.编译x86_64平台的openssl,Configure时需要指定no-asm选项,否则会报错;

9>. openssl-build.sh可能只支持较新版本的openssl,因为新的版本内建支持iOS,要支持老版的,请自己修改脚本。

阅读(4524) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~