gpt4 book ai didi

objective-c - `-fembed-bitcode` 和 BITCODE_GENERATION_MODE 有什么区别?

转载 作者:太空狗 更新时间:2023-10-30 03:10:27 26 4
gpt4 key购买 nike

我一直在更新静态库以支持位码,并且根据我的研究,我发现了两种实现此目的的方法:

  • fembed-bitcode 标记添加到我的项目build设置中的其他 C 标记选项 (link)
  • 添加一个用户定义的设置,键 BITCODE_GENERATION_MODE 设置为 bitcode ( link )

这两个选项有什么区别吗?

我注意到的唯一区别是,通过使用 fembed-bitcode,生成的 iphonesimulator 静态库将在启用完整位码的情况下构建(在我的例子中,二进制大小从 5MB 变为 13MB,并且我可以使用 otool) 检查位码支持,这似乎对它的使用没有任何影响。

最佳答案

当您使用 ENABLE_BITCODE=YES 正常构建库时,Xcode 将构建标志 -fembed-bitcode-marker 添加到任何 clang 调用,放置一个“空”最终 o 文件中的位码。

因此,如果您查看构建阶段的编译操作,它将类似于:

CompileC {build_path}/StaticBitcode/StaticLogger.o StaticBitcode/StaticLogger.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compilercd {path}/StaticBitcodeexport LANG=en_US.US-ASCIIexport PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -arch armv7 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu99 -fobjc-arc -fmodules -gmodules -fmodules-cache- [...] -fembed-bitcode-marker [...]

这适用于构建操作(独立于目标)。

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

CompileC {build_path}/StaticBitcode/StaticLogger.o StaticBitcode/StaticLogger.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compilercd {path}/StaticBitcodeexport LANG=en_US.US-ASCIIexport PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -arch armv7 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu99 -fobjc-arc -fmodules -gmodules -fmodules-cache- [...] -fembed-bitcode [...]


fembed-bitcode 标志

鉴于此,如果您将 -fembed-bitcode 标志添加到其他 cflags,您将在编译期间向编译器发送两个标志。它可能会使您在使用链接到另一个项目的库时收到的一些警告静音。但是,您需要检查是否获得了预期的行为。 :)

(当我在其他 cflags上使用 -fembed-bitcode 进行测试时,Xcode 发出警告 clang: warning: argument unused during compilation: '-fembed-bitcode-marker' )


BITCODE_GENERATION_MODE

另一方面,

如果您在 User-defined Setting 上设置 BITCODE_GENERATION_MODE=bitcode,即使在构建阶段,也会使用标志 -fembed- 编译文件位码.

并且,如果您设置 BITCODE_GENERATION_MODE=marker,文件将使用标志 -fembed-bitcode-marker 进行编译,独立于操作阶段。

因此,如果您想为每个操作(构建和归档)启用位码,更好的方法是使用 BITCODE_GENERATION_MODE 设置。


资源

关于objective-c - `-fembed-bitcode` 和 BITCODE_GENERATION_MODE 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34959767/

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