问题描述
我正在使用Xcode通过单对象预链接将所有包含位代码的对象文件(*.o
)和静态库(*.a
)的集合预链接到单个静态库中。
这样做,生成的预链接文件不包含位码。
Xcode发出的预链接命令和选项如下:
ld -r -arch arm64 -bitcode_bundle -bitcode_verify -syslibroot
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.6.sdk
a.o
b.o
...
x.a
y.a
-o libABC-arm64-master.o
bitcode_bundle
选项的文档指示“它需要所有目标文件,静态库和用户框架/ dylib包含位代码”。我已经使用otool
来验证所有组成文件都包含位码。
ld
命令不会引发或记录错误,即使我直接从命令行(与Xcode分开)进行测试也是如此。
我很困惑。任何帮助或建议,我们将不胜感激。
更新: 在进一步的测试中,我可以创建一个仅包含任何单个.o
文件的预链接文件,而最终的预链接文件将包含位码。但是,如果包含其中两个.o
文件中的任何两个,每个文件都包含位代码,则导致预链接的文件中不包含位代码。
解决方法
您可能应该检查结果库中的_LLVM部分,而不是_bitcode:
otool -l lib.a | grep _LLVM