编译 Bitcode 版静态库掉过的坑

2017-05-09  本文已影响0人  zhangleipku

在公司负责开发内部用的 iOS 的静态库工具。随着 BitCode 的诞生,静态库也需要更新一下。

先说一下 我掉坑的经过:

打开 XCode ,在 Build Phases 里面把编译选项 BitCode 设置了为 ON,然后生成 .a。

接着,为了验证是否成真的支持 BitCode , 我新建了一个Project,导入 .a,然后把新工程的编译选项也设置成为ON。 结果顺利编译。

于是就这么交差了。

不料出事了....... 公司同事说他遇到这样的错误:

ld: bitcode bundle could not be generated because '......./libxxx.a(xxxxx.o)' was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

Google了一番才发现,原来我的做法还真有问题。

事实上,按照上面的做法,根本没有生成真正的BitCode二进制代码。

普通的编译模式下,XCode使用的编译选项是 -fembed-bitcode-marker,此时并不会编译出真正的BitCode二进制代码,而只是做个标记说:“这里应该有BitCode”;

而在 Archive 编译模式下,XCode 会把编译选项自动变为 -fembed-bitcode,此时才会真的生成BitCode的二进制代码。

可以通过命令行来确认二进制代码中是否包含BitCode。

otool -l (my .o or .a file) | grep __LLVM

如果有BitCode的话,应该会有很多 segname __LLVM 的结果。

参考:

http://stackoverflow.com/questions/31486232/how-do-i-xcodebuild-a-static-library-with-bitcode-enabled

http://akataworks.hatenadiary.jp/entry/2015/12/07/202455

上一篇下一篇

猜你喜欢

热点阅读