hei*_*ent 28 objective-c static-libraries bitcode
我一直在更新一个静态库来支持bitcode,从我的研究中我发现了两种实现方法:
这两个选项有什么区别吗?
我注意到的唯一区别是,通过使用fembed-bitcode,生成的iphonesimulator静态库将在启用完全bitcode的情况下构建(在我的情况下,二进制大小从5MB变为13MB,我可以检查bitcode支持使用otool),这看起来似乎不大使用它有任何不同.
Igo*_*ira 43
当您正常构建库时ENABLE_BITCODE=YES,Xcode会将构建标志添加-fembed-bitcode-marker到任何clang调用中,并在最终的o文件中放置一个"空"bitcode.
因此,如果您在构建阶段查看编译操作,它将类似于:
CompileC {build_path} /StaticBitcode/StaticLogger.o StaticBitcode/StaticLogger.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler cd {path}/StaticBitcode export LANG = en_US.US-ASCII export 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.compiler cd {path}/StaticBitcode export LANG = en_US.US-ASCII export 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标志添加到Other C标志,则在编译期间将向编译器发送两个标志.它可能会使用在另一个项目上链接的库时可以收到的一些警告静音.但是,您需要检查是否获得了预期的行为.:)
(当我使用-fembed-bitcode其他C标志测试时,Xcode发出了警告clang: warning: argument unused during compilation: '-fembed-bitcode-marker')
另一方面,
如果你设置BITCODE_GENERATION_MODE=bitcode了User-defined Setting,即使在构建阶段,也会使用标志编译文件-fembed-bitcode.
并且,如果设置BITCODE_GENERATION_MODE=marker,将使用标志编译文件-fembed-bitcode-marker,而不依赖于操作阶段.
因此,如果要为每个操作(构建和存档)启用bitcode,更好的方法是使用该BITCODE_GENERATION_MODE设置.