美文网首页
编译 Bitcode 版静态库掉过的坑

编译 Bitcode 版静态库掉过的坑

作者: zhangleipku | 来源:发表于2017-05-09 15:15 被阅读0次

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

    相关文章

      网友评论

          本文标题:编译 Bitcode 版静态库掉过的坑

          本文链接:https://www.haomeiwen.com/subject/ndovtxtx.html