gpt4 book ai didi

ios - 我如何使用 xcode 构建启用了 Bitcode 的静态库?

转载 作者:IT王子 更新时间:2023-10-29 07:31:02 27 4
gpt4 key购买 nike

Xcode 7 引入了 Bitcode ,这是某种 LLVM 中间二进制文件,这意味着 Apple 的服务器可以在我不参与的情况下为不同的架构重新编译我的应用程序。

在 Lookback,我在我们的图书馆中分发了一个静态存档框架。似乎当您使用除“Build & Archive”之外的任何东西构建时,bitcode 实际上并没有发送到我的库中,任何在他们的应用程序中链接到我的库并尝试在启用 Bitcode 的情况下进行 Build & Archive 的人都会得到其中之一两个警告:

  • ld: 'Lookback(Lookback.o)' 不包含位码。您必须在启用位码的情况下重建它(Xcode 设置 ENABLE_BITCODE),从供应商处获取更新的库,或为此目标禁用位码。(如果 lib 是使用 Xcode 6 构建的)
  • ld:警告:无法生成完整的位码包,因为“Lookback(Lookback.o)”仅使用位码标记构建。该库必须从启用了位码的 Xcode 归档构建中生成(Xcode 设置 ENABLE_BITCODE)(如果 lib 是使用 Xcode 7 和普通 xcodebuild 构建的)

我有一个构 build 备+模拟器通用二进制文件的构建脚本,所以我不能使用构建和存档,而是从脚本的命令行运行 xcodebuild。我怎样才能让 xcodebuild 生成一个正确的启用位码的库?

最佳答案

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

正常构建时,Xcode 将构建标志 -fembed-bitcode-marker 添加到任何 clang 调用。这似乎是某种“如果启用了 bitcode,这就是 bitcode 所在的位置”的事情,实际上并没有启用 bitcode。

当您“Build & Archive”时,此标志被替换为 -fembed-bitcode,它确实构建了一个支持 Bitcode 的二进制文件。

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

  • 使用“归档”操作,如 xcodebuild -target LookbackSDK archive 而不是 xcodebuild -target LookbackSDK build。这具有将二进制文件放入 Xcode Organizer 而不是 build/ 文件夹的副作用,尽管您可以通过使用 -exportArchive -archivePath ./build 来解决这个问题(谢谢 @JensAyton )
  • 通过使用 OTHER_CFLAGS="-fembed-bitcode" 添加其他 cflags来强制使用该标志。您的 xcodebuild 调用类似于 xcodebuild OTHER_CFLAGS="-fembed-bitcode"-target LookbackSDK build

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

资源

关于ios - 我如何使用 xcode 构建启用了 Bitcode 的静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31486232/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com