我最近下载了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
答案 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生成和嵌入,所以这就是构建静态库所需要的。-fembed-bitcode-marker
构建用于常规构建(如部署到模拟器)-fembed-bitcode
构建存档构建/生产版本(因为这仅适用于Apple)。答案 1 :(得分:49)
转到构建设置。搜索“自定义编译器标志”。
将-fembed-bitcode
添加到其他C标志。
这将确保在编译时使用bitcode兼容性构建lib。我为iOS 64位和32位做了这个,并将它们变成了一个。
奇迹般有效。
由于你们有查询,这里是设置的屏幕截图:项目目标和SDK目标的设置相同。
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的指南也可能对您有所帮助:
答案 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)之外,很少有提示/事情可以帮助我最终解决问题
确保您在'PROJECT'上将变量'Other C Flags'设置为“-fembed-bitcode”,以及所有'TARGETS'。
如果您尝试为多个项目创建静态库,请确保所有项目都已启用"-fembed-bitcode"
。
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}}位码
如果上述步骤不起作用,您也可以尝试此选项。 , and set Debug to
- fembed-位码标志物, Release to
- fembed-位码
这个博客非常有帮助 https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9
每次进行上述更改时,请尝试删除DerivedData,清理XCode项目,并可能退出并重新启动XCode