iOS库到BitCode
我最近下载了Xcode 7 beta,Xcode抱怨我的一些C库没有被编译到BitCode中。 我如何去告诉Clang生产与iOS兼容的BitCode? 我已经在stackoverflow上看到了类似的答案,但我不知道它们是否适用于为iOS生成BitCode库。
编辑:
我正在使用正确的设置,-fembed-bitcode,但是当我尝试归档时,我得到的错误:ld:warning:忽略文件XXXX / XXXX,文件是不是被链接的体系结构(arm64)。 当我使用-fembed-bitcode-marker,我可以存档,但我得到的错误:完整的位码捆绑无法生成,因为XX / XX只build立了位码标记。 该库必须从启用位码的Xcode存档库中生成。
任何想法出了什么问题? 该库正在编译成功,但它不让我归档。 我创build了一个简单的添加函数,并将其制作成一个库,并得到相同的症状,所以它不是我正在编译的库。
编辑2:你必须使用bitcode构buildarm64和armv7版本,并将它们放在一起。 使用位码不会在归档时消除对胖库的需求。 来源: https : //forums.developer.apple.com/message/25132#25132
在构build静态库时,您必须遵循以下代码生成过程:
-fembed-bitcode
注意:该命令仅适用于Xcode7 +
关于使用-fembed-bitcode-marker
的公认的答案
您应该知道,使用-fembed-bitcode-marker选项的正常编译将生成最小尺寸的embedded位代码段,而不包含任何实际内容。 这是作为一种testing你的构build的位码相关方面而不减慢构build过程的方式完成的。 当您执行存档构build时,将包含实际的位代码内容。
bwilson苹果职员。 https://forums.developer.apple.com/thread/3971#12225
更具体地说:
-
-fembed-bitcode-marker
简单地标记存档构build之后二进制位将在二进制位中的位置。 -
-fembed-bitcode
实际上是完整的bitcode生成和embedded,所以这是你需要用来build立静态库。 - Xcode本身使用
-fembed-bitcode-marker
构build常规构build(如部署到模拟器) - Xcode只是用
-fembed-bitcode
构build,用于存档构build/生产构build(因为这只是苹果公司需要的)。
转到生成设置。 search“自定义编译器标志”。 向其他C标志添加-fembed-bitcode
。 这将确保lib在编译时与bitcode兼容。 我为iOS创build了64位和32位,并将它们合并为一个。 奇迹般有效。
由于你们有查询,下面是设置的截图:设置对于项目目标和SDK目标是相同的。
bitcode lib不能用于Xcode 6。
如果在将其他C标志添加-fembed-bitcode
后仍然有问题,请在“Build Options”下search“Enable Bitcode”并将其设置为No。这将允许您正确存档。
你需要的是带有位码的。 当启用ENABLE_BITCODE时,Xcode使用-fembed-bitcode-marker构build常规构build,使用-fembed-bitcode构build归档。 一个选项简单地“标记”在二进制文件构build之后二进制位将在二进制位中,并强制执行新的位代码规则,而另一个实际上执行完整的位代码生成,这可能较慢,因此在每种构build。
Syo Ikeda处理BITCODE的指南也可以帮助您:
你可以在这里find完整的幻灯片。
如果你正在build立一个静态库并想启用位码,只需要(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)之外,还有很less的提示/要考虑的事情帮助我最终解决问题,
-
确保你在'PROJECT'上设置variables'Other C Flags'为'-fembed-bitcode',以及所有'TARGETS'。
-
如果有多个项目正在尝试创build静态库,请确保所有项目都启用了
"-fembed-bitcode"
。 -
On Build Settings, click on the + sign at the top to add a user-defined build setting with the name
BITCODE_GENERATION_MODEOn Build Settings, click on the + sign at the top to add a user-defined build setting with the name
, and set Debug to
标记, Release to
码 -
如果上述步骤不起作用,您也可以尝试此选项。
On Build Settings -> Other C flags, set Debug to
– 标记位码标记, and Release to
– 标记位码
这个博客是非常有帮助https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9
此外,每次进行上述更改时,请尝试删除DerivedData,清理XCode项目,并可能退出并重新启动XCode