编译 Bitcode 版静态库掉过的坑

在公司负责开发内部用的 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 2000年,伊利诺伊大学厄巴纳-香槟分校(University of Illinois at Urbana-...
    星光社的戴铭阅读 16,124评论 8 180
  • 一、BitCode是什么 Bitcode is an intermediate representation of...
    Yaanco阅读 1,023评论 0 7
  • 一天,我和妈妈在静谧中谈起了时光,窗外的绿叶显得那么饱满。 我说:“时光不回头,那我们能去强行制止它吗?”妈妈听后...
    硕果蕾蕾阅读 240评论 0 3
  • 一遍又一遍的听着薛之谦的那首《刚刚好》,发现自己听到的不是里面的挣扎与放下,而是那一句到这刚刚好。 你说,什么叫...
    石蚌阅读 143评论 0 2
  • 宿舍成员: 鹏飞(嘿嘿,本人啊)、小磊、亮子、山仔、小刘。 做一下简介吧。 我本来应该被称为“小邱”,在这里却偏偏...
    渔夫now阅读 494评论 0 0