我有一个由其他公司构建的静态库。我想知道它是否是一个包含bitcode的静态库,哪个命令可以在终端中检测到它?
答案 0 :(得分:51)
正如其他答案所写,
otool -l yourlib.a | grep __LLVM
是要走的路。
otool -l yourlib.a | grep bitcode
不可靠。
搜索" bitcode" section不是检测文件是否包含嵌入式bitcode的可靠方法。如果您想这样做,请搜索" __ LLVM"分割。您应该知道,使用-fembed-bitcode-marker选项的正常构建将生成最小尺寸的嵌入式bitcode部分,而没有任何实际内容。这样做是为了测试构建的bitcode相关方面,而不会降低构建过程的速度。执行存档构建时会包含实际的bitcode内容。
另请参阅xCocoa的评论。
看来,otool
如果包含iPhone模拟器架构的代码(x86_64或arm64),则不会报告bitcode。
您可以列出lib的体系结构:
lipo -info yourlib.a
然后你可以分别检查每个架构的bitcode,例如:
otool -arch armv7 -l yourlib.a | grep bitcode
otool -arch arm64 -l yourlib.a | grep bitcode
答案 1 :(得分:2)
免责声明:我是LibEBC的作者。
您可以使用^.*[a-zA-Z].*$
查看是否在Mach-O二进制文件或库中存在bitcode。您甚至可以使用它从中提取嵌入式bitcode。
答案 2 :(得分:1)
建议针对LLVM符号进行测试:
otool -l yourlib.a | grep LLVM
你应该得到一些带有“__LLVM”
的行答案 3 :(得分:1)
如果要检查静态库中的特定文件(yourFile.o)
是否启用了bitcode,则可以提取'staticLibrary.a'
并使用相同的otool
命令。但是,macOS不允许使用默认提取实用程序提取staticLibrary.a,并且大多数第三方工具也不起作用。
您可以按照以下步骤检查特定的.o
文件
获取架构信息
lipo -info yourStaticLibrary.a
例如输出:armv7 arm64
为上述任何一个或两个架构提取yourStaticLibrary.a
lipo yourStaticLibrary.a -thin armv7 -output yourStaticLibraryarmv7.a
(指定要提取的输出路径)
您获得了'yourStaticLibraryarmv7.a'
,然后可以使用默认的mac unarchiver轻松提取
在提取时,您会获得一个包含所有.o文件的文件夹<{1}}
yourStaticLibraryarmv7'
或者使用特定的架构
otool -l yourFile.o | grep bitcode
如果文件启用了bitcode,则会获得“sectname __bitcode”#39;在命令行中
答案 4 :(得分:-1)
您可以尝试: otool -l(.o或.a文件)
并查找“__bitcode”部分
在这里回答: How do I xcodebuild a static library with Bitcode enabled?