首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在启用Bitcode的情况下Bitcode构建静态库?

如何在启用Bitcode的情况下Bitcode构建静态库?
EN

Stack Overflow用户
提问于 2015-07-18 07:37:34
回答 4查看 50.3K关注 0票数 92

Xcode7引入了Bitcode,这是一种LLVM中间二进制文件,这意味着苹果的服务器可以针对不同的架构重新编译我的应用程序,而不需要我的参与。

在Lookback,我在我们的库中发布了一个静态归档框架。似乎当你使用"Build & Archive“之外的任何东西构建时,bitcode实际上并不会被发送到我的库中,并且任何人在他们的应用程序中链接到我的库并尝试在启用Bitcode的情况下执行build & Archive时,都会收到以下两个警告之一:

  • ld: 'Lookback(Lookback.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. (如果lib是用xcodebuild构建的(如果lib是用xcodebuild用xcode7构建的)

我有一个构建device+simulator通用二进制文件的构建脚本,所以我不能使用build & Archive,而是从我的脚本中的命令行运行xcodebuild。如何让xcodebuild生成一个合适的支持位代码的库?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-18 07:37:34

位码是一种编译时特性(而不是链接时特性),这意味着在使用位码构建时,每个.o文件都应该包含一个名为__bitcode的额外部分。您可以通过运行otool -l (my .o or .a file) | grep __LLVM来确认您的二进制文件是否与位码兼容。

在正常构建时,Xcode会将构建标志-fembed-bitcode-marker添加到任何clang调用中。这看起来像是某种“如果启用了bitcode,这就是bitcode会去的地方”之类的东西,实际上并没有启用bitcode。

当你“构建和存档”时,这个标志被-fembed-bitcode替换,它确实构建了一个启用了位码的二进制文件。

似乎有两种方法可以让xcodebuild使用-fembed-bitcode

  • 使用'archive‘操作,如在xcodebuild -target LookbackSDK archive中,而不是xcodebuild -target LookbackSDK build。这样做的副作用是将二进制文件放在您的Xcode管理器中,而不是build/文件夹中,不过您可以通过使用-exportArchive -archivePath ./build来解决这个问题(感谢OTHER_CFLAGS="-fembed-bitcode"通过添加其他C标志来使用该标志)。您的xcodebuild调用应该类似于xcodebuild OTHER_CFLAGS="-fembed-bitcode" -target LookbackSDK build.

我选择了后者,这样我就不必更改我的构建系统,但它将为每个文件生成警告,因为现在-fembed-bitcode-marker-fembed-bitcode都被发送到clang。幸运的是,后者赢了,生成了一个支持Bitcode的库!

资源

票数 141
EN

Stack Overflow用户

发布于 2017-09-09 02:40:21

使用Xcode8时,我无法让OTHER_CFLAGS="-fembed-bitcode"正常工作。当我试图创建一个包含我的静态框架的应用程序的存档构建时,我总是遇到类似was built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive or Install build的东西。

我真正想要的是:

代码语言:javascript
复制
BITCODE_GENERATION_MODE=bitcode

我实际上在聚合目标中使用了一个Run脚本,完整的xcodebuild代码行如下所示(仅供参考):

xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

票数 42
EN

Stack Overflow用户

发布于 2015-09-15 18:11:36

一旦你添加了对静态库的bitcode支持,它将与Xcode 6不兼容。应用程序将不会存档。

我想清楚地提到bitcode的设置,因为@nevyn的答案让我有点困惑。

转到构建设置,搜索“自定义编译器标志”。添加-fembed-bitcode。这将使用bitcode构建您的库。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31486232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档