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

xCo*_*coa 34 bitcode

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

Oli*_*ver 54

因为它已被写在其他答案中,

otool -l yourlib.a | grep __LLVM
Run Code Online (Sandbox Code Playgroud)

是要走的路.

一位Apple工程师说使用

otool -l yourlib.a | grep bitcode
Run Code Online (Sandbox Code Playgroud)

不可靠的.

搜索"bitcode"部分不是检测文件是否包含嵌入式bitcode的可靠方法.如果要这样做,请搜索"__LLVM"段.您应该知道,使用-fembed-bitcode-marker选项的正常构建将产生最小尺寸的嵌入式bitcode部分,而没有任何实际内容.这样做是为了测试构建的bitcode相关方面,而不会降低构建过程的速度.执行存档构建时会包含实际的bitcode内容.

另请参阅xCocoa的评论.

看来,otool如果包含iPhone模拟器架构的代码(x86_64或arm64),则不会报告bitcode.

您可以列出lib的体系结构:

lipo -info yourlib.a
Run Code Online (Sandbox Code Playgroud)

然后你可以分别检查每个架构的bitcode,例如:

otool -arch armv7 -l yourlib.a  | grep bitcode
otool -arch arm64 -l yourlib.a  | grep bitcode
Run Code Online (Sandbox Code Playgroud)

  • @EugeneDubinin Bitcode只是一些额外的信息,所以除了稍微增加的尺寸之外没有任何伤害.然而,在二进制缺少位码意味着你不能对需要位码的目标链接它(即位码已启用). (2认同)
  • 请注意,如果使用`-fembed-bitcode-marker`而不是`-fembed-bitcode`(检查编译器输出)进行编译,则使用这些命令可能会得到误报,因为存在位码“ marker”,仅不是实际的位码。[此答案](/sf/answers/2447562491/)对此有更多信息。 (2认同)
  • 在@WilliamDenniss的答案之后,您可以通过在otool结果中grepping比特码来检查误报,然后在其后四行查看size字段。(您可以使用-A 4参数查看grep匹配后的下4行)。如果大小为1,则表示未设置-fembed-bitcode,并且库中不包含位代码。 (2认同)

Sei*_*Wiz 3

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

otool -l yourlib.a | otool -l yourlib.a | grep LLVM

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