如何检查构建的静态库包含bitcode?

时间:2015-09-24 07:32:42

标签: bitcode

我有一个由其他公司构建的静态库。我想知道它是否是一个包含bitcode的静态库,哪个命令可以在终端中检测到它?

5 个答案:

答案 0 :(得分:51)

正如其他答案所写,

otool -l yourlib.a | grep __LLVM

是要走的路。

Apple engineer says使用

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。

https://github.com/JDevlieghere/LibEBC

答案 2 :(得分:1)

建议针对LLVM符号进行测试:

otool -l yourlib.a | grep LLVM

你应该得到一些带有“__LLVM”

的行

答案 3 :(得分:1)

如果要检查静态库中的特定文件(yourFile.o)是否启用了bitcode,则可以提取'staticLibrary.a'并使用相同的otool命令。但是,macOS不允许使用默认提取实用程序提取staticLibrary.a,并且大多数第三方工具也不起作用。

您可以按照以下步骤检查特定的.o文件

  1. 获取架构信息

    lipo -info yourStaticLibrary.a
    
  2. 例如输出:armv7 arm64

    1. 为上述任何一个或两个架构提取yourStaticLibrary.a

      lipo yourStaticLibrary.a -thin armv7 -output yourStaticLibraryarmv7.a
      
    2. (指定要提取的输出路径)

      1. 您获得了'yourStaticLibraryarmv7.a',然后可以使用默认的mac unarchiver轻松提取

      2. 在提取时,您会获得一个包含所有.o文件的文件夹<{1}}

      3. yourStaticLibraryarmv7' 或者使用特定的架构

        otool -l yourFile.o | grep bitcode
      4. 如果文件启用了bitcode,则会获得“sectname __bitcode”#39;在命令行中

答案 4 :(得分:-1)

您可以尝试: otool -l(.o或.a文件)

并查找“__bitcode”部分

在这里回答: How do I xcodebuild a static library with Bitcode enabled?