iOS库到BitCode

sta*_*tom 49 c ios8 bitcode xcode7-beta2

我最近下载了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

Dan*_*li3 64

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

-fembed-bitcode 
Run Code Online (Sandbox Code Playgroud)

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

-fembed-bitcode
Run Code Online (Sandbox Code Playgroud)

注意:此命令仅适用于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).


Gau*_*ain 51

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

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

在此输入图像描述


bitcode lib不适用于Xcode 6.

  • 能否请您共享用于制作64位,32位和模拟器的脚本,然后将它们合而为一? (2认同)

Ian*_*Han 27

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


Xei*_*han 15

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

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

你可以在这里找到完整的幻灯片.


Nai*_*hta 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
Run Code Online (Sandbox Code Playgroud)

除了上述步骤(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 nameBITCODE_GENERATION_MODE , and set Debug to标记, Release tobitcode

  4. 如果上述步骤不起作用,您也可以尝试此选项.On Build Settings -> Other C flags, set Debug to-fembed-bitcode-marker , and Release to-fembed-bitcode

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

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