doorxp

Blog

iOS交叉编译C库



Configure:

./configure:该命令是我们所需要注意和配置的地方,这个配置决定了我们所生产出来的静态库的平台(构建版本和操作系统)


这里我们只牵扯到iOS系统对应的构建版本,在此说明一下:


x86: 如果你的静态库需要在iOS simulator上运行且你的Mac OS是32位系统,需要打这个构建版本。


x86_64: x86的64位版本,你的Mac OS版本是64位,打这个版本


armv7: iPhone 4s上使用的构建版本


armv7s: iPhone 5上使用的构建版本


arm64: iPhone 5s以上使用的构建版本(如果你的app只支持iOS11,那么你就只打这个版本就可以了)


下面,我们具体说一下该如何确定配置:

xcodebuild -showsdks 2>/dev/null
//列出支持的 sdk

xcrun --sdk iphoneos --show-sdk-path 2>/dev/null
//得到isysroot path


//我的Xcode是8.3的,iPhoneSDK是10.3
$ export CFLAGS="-arch arm64 -isysroot ${上一步得到的 path} -miphoneos-version-min=10.0 -fembed-bitcode -DNDEBUG -Wno-sign-compare"
//这里定义了CFLAGS这个标志,代表的我们使用的编译器相关的内容。
 
//host: 交叉编译的库所运行的系统, prefix: 库存放位置,默认为/usr/local/lib
$ ./configure --host=arm-apple-darwin --prefix=$PWD/build/arm64 
//默认会打出静态包(.a)和分享包(.dylib)
 
$ make && make install

其实CFLAGS里的东西不需要搞得很明白,需要明白几点就是:


arch: 构建的版本对应一定是你所需要打的版本
isysroot: 我们的iPhoneSDK所存放的位置
miphoneos-version-min: 你所要sdk支持的iPhone最低版本
-fembed-bitcode: 生成bitcode指令


多版本融合:

最后提一点,就是打包的时候,可能会构建多版本(x86,x86_64,armv7s,arm64),那么你需要注意的就是将这些包融合为一个,使用lipo命令:

$ lipo -create /path/to/library1 /path/to/library2 /path/to/library3 -output /path/to/universal_library.a


发表评论:

«   2024年11月   »
123
45678910
11121314151617
18192021222324
252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言

    Powered By Z-BlogPHP 1.5.1 Zero

    Copyright doorxp.com Rights Reserved.