iOS库到BitCode

时间:2015-07-05 18:04:58

标签: c ios8 xcode7-beta2 bitcode

我最近下载了Xcode 7 beta版,Xcode抱怨我的一些C库没有编译成BitCode。我如何告诉Clang生成与iOS兼容的BitCode?我在stackoverflow上看到了类似的答案,但我不知道它们是否适用于为iOS生成BitCode库。

编辑:

我正在使用正确的设置-fembed-bitcode,但是当我尝试存档时,我收到错误: ld:警告:忽略文件XXXX / XXXX,文件是为存档而构建的,而不是被链接的架构(arm64)。 当我使用-fembed-bitcode-marker时,我可以存档,但是我收到错误: 无法生成完整的bitcode包,因为XX / XX仅使用bitcode标记构建。必须从启用了bitcode的Xcode存档构建生成库。

关于出了什么问题的任何想法?该库正在成功编译,但它不允许我存档。我创建了一个简单的添加函数并将其放入库中,我得到了相同的症状,因此它不是我正在编译的库。

编辑2: 你必须使用bitcode和lipo一起构建arm64和armv7版本。使用bitcode在归档时不会消除对胖库的需求。来源:https://forums.developer.apple.com/message/25132#25132

5 个答案:

答案 0 :(得分:61)

构建静态库时,必须为bitcode生成添加以下内容:

-fembed-bitcode 

对于动态库,您需要另外链接

-fembed-bitcode

注意:此命令仅适用于Xcode7 +

关于使用-fembed-bitcode-marker

的已接受答案
  

你应该知道正常的构建与   -fembed-bitcode-marker选项将生成最小尺寸的嵌入式bitcode部分,没有任何实际内容。这是作为一种方式完成的   在不降低速度的情况下测试构建的bitcode相关方面   构建过程。当你这样做时,会包含实际的bitcode内容   存档构建。

bwilson Apple员工。 https://forums.developer.apple.com/thread/3971#12225

更具体一点:

  • -fembed-bitcode-marker只标记存档构建后bitcode在二进制文件中的位置。
  • -fembed-bitcode实际上是完整的bitcode生成和嵌入,所以这就是构建静态库所需要的。
  • Xcode本身用-fembed-bitcode-marker构建用于常规构建(如部署到模拟器)
  • Xcode仅使用-fembed-bitcode构建存档构建/生产版本(因为这仅适用于Apple)。

答案 1 :(得分:49)

转到构建设置。搜索“自定义编译器标志”。
-fembed-bitcode添加到其他C标志。 这将确保在编译时使用bitcode兼容性构建lib。我为iOS 64位和32位做了这个,并将它们变成了一个。 奇迹般有效。

由于你们有查询,这里是设置的屏幕截图:项目目标和SDK目标的设置相同。

enter image description here

bitcode lib不适用于Xcode 6。

答案 2 :(得分:26)

如果在将-fembed-bitcode添加到其他C标志后仍然遇到问题,请在“构建选项”下搜索“启用Bitcode”并将其设置为否。这样可以正确存档。 / p>

答案 3 :(得分:14)

  

你需要的是-fembed-bitcode。启用ENABLE_BITCODE后,Xcode将使用-fembed-bitcode-marker进行常规构建,并使用-fembed-bitcode进行存档构建。   一个选项只是“标记”在存档构建之后bitcode将在二进制文件中的位置并强制执行新的bitcode规则,而另一个选项实际上执行完整的bitcode生成,这可能更慢,因此在每种构建时都没有启用

Syo Ikeda处理BITCODE的指南也可能对您有所帮助:

You can find the full slide deck here.

答案 4 :(得分:10)

如果您正在构建静态库并且想要启用bitcode,那么只需要 (1)ENABLE_BITCODE = YES可能还不够。

(2)同样使用设置-fembed-bitcode,在Teamcity中构建时,仍会为多个文件抛出以下错误

bitcode bundle could not be generated because ‘/path/fileInYourStaticLib.a(fileInYourStaticLib.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

除了上述步骤(1)和(2)之外,很少有提示/事情可以帮助我最终解决问题

  1. 确保您在'PROJECT'上将变量'Other C Flags'设置为“-fembed-bitcode”,以及所有'TARGETS'。

  2. 如果您尝试为多个项目创建静态库,请确保所有项目都已启用"-fembed-bitcode"

  3. On Build Settings, click on the + sign at the top to add a user-defined build setting with the name {BITCODE_GENERATION_MODE {1}} {标记{1}}位码

  4. 如果上述步骤不起作用,您也可以尝试此选项。 , and set Debug to - fembed-位码标志物, Release to - fembed-位码

  5. 这个博客非常有帮助 https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

    每次进行上述更改时,请尝试删除DerivedData,清理XCode项目,并可能退出并重新启动XCode