我一直在更新静态库来支持bitcode,从我的研究中我发现了两种方法来实现这一点:
这两个选项之间有什么区别吗?
我注意到的唯一区别是,通过使用fembed-bitcode
,生成的iphonesimulator静态库将在启用完全bitcode的情况下构建(在我的情况下,二进制大小从5MB变为13MB,我可以检查bitcode支持使用otool
),这似乎对其使用没有任何影响。
答案 0 :(得分:39)
当您使用ENABLE_BITCODE=YES
正常构建库时,Xcode会将构建标志-fembed-bitcode-marker
添加到任何clang调用中,并将"空的" bitcode在最后的o文件中。
因此,如果您在构建阶段查看编译操作,它将类似于:
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 /箱:在/ 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
替换,-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 /箱:在/ 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标志,则在编译期间将向编译器发送两个标志。它可能会使用在另一个项目上链接的库时可以收到的一些警告静音。但是,您需要检查是否获得了预期的行为。 :)
(当我在其他C标志上使用clang: warning: argument unused during compilation: '-fembed-bitcode-marker'
进行测试时,Xcode发出警告BITCODE_GENERATION_MODE=bitcode
)
另一方面,
如果您在User-defined Setting
上设置-fembed-bitcode
,即使在构建阶段,也会使用标记BITCODE_GENERATION_MODE=marker
编译文件。
并且,如果设置-fembed-bitcode-marker
,将使用标志BITCODE_GENERATION_MODE
编译文件,与操作阶段无关。
因此,如果您想为每个操作(构建和存档)启用bitcode,更好的方法是使用public class buildingSCO : ScriptableObject
{
public string Name;
public string ID;
public resourceSco Res;
}
设置。