我一直在更新一个静态库以支持位代码,从我的研究中,我发现了两种实现方法:
Is there any difference between these two options?
我注意到的唯一区别是,通过使用fembed-bitcode
,iphonesimulator生成的静态库将在启用完整位码的情况下构建(在我的情况下,二进制大小从5MB更改为13MB,我可以使用otool
判断位码支持),这似乎对其使用没有任何影响.
我一直在更新一个静态库以支持位代码,从我的研究中,我发现了两种实现方法:
Is there any difference between these two options?
我注意到的唯一区别是,通过使用fembed-bitcode
,iphonesimulator生成的静态库将在启用完整位码的情况下构建(在我的情况下,二进制大小从5MB更改为13MB,我可以使用otool
判断位码支持),这似乎对其使用没有任何影响.
正常构建库时,使用ENABLE_BITCODE=YES
,Xcode会将构建标志-fembed-bitcode-marker
添加到任何叮当声调用中,在最终的o文件中放置一个"空"位代码.
因此,如果您在构建阶段查看编译操作,它将如下所示:
编译{build_path}/StaticBitcode/StaticLogger.o静态位码/静态记录器.m普通armv7 objective-c com.苹果编译器.llvm.叮当声.1_0.编译程序
构建操作也是如此(独立于目标).
当您输入Build & Archive
时,-fembed
标志将被-fembed-bitcode
取代,这确实构建了一个启用位码的二进制:
编译{build_path}/StaticBitcode/StaticLogger.o静态位码/静态记录器.m普通armv7 objective-c com.苹果编译器.llvm.叮当声.1_0.编译程序
fembed-bitcode flag
考虑到这一点,如果将-fembed-bitcode
标志添加到其他C标志中,则将在编译期间向编译器发送两个标志.它可能会使您在使用链接到另一个项目的库时收到的一些警告静音.但是,你需要判断你是否达到了预期的行为.:)
(当我在其他C标志上使用-fembed-bitcode
进行测试时,Xcode给出了警告clang: warning: argument unused during compilation: '-fembed-bitcode-marker'
)
BITCODE_GENERATION_MODE
另一方面
如果在User-defined Setting
上设置BITCODE_GENERATION_MODE=bitcode
,即使在构建阶段,文件也将使用标志-fembed-bitcode
进行编译.
如果设置为BITCODE_GENERATION_MODE=marker
,则文件将使用标志-fembed-bitcode-marker
编译,与操作阶段无关.
因此,如果您想 for each 操作(构建和归档)启用位码,更好的方法是使用BITCODE_GENERATION_MODE
设置.
Resources