[英]How to check if a framework is Bitcode supported for Xcode7
从这个 Apple Developers Forum讨论中,用户dshirley和bwilson建议使用命令行工具otool
和grep
来检查是否存在 bitcode 部分。
$ otool -l libName.o | grep __LLVM
或者
$ otool -l MyFramework.framework/Versions/A/MyFramework | grep __LLVM
运行上述命令,如果库包含位码,您将看到segname __LLVM
输出。
接受的答案表明你应该做grep __LLVM
但我宁愿这样做
otool -l libName.o | grep __bitcode
因为有不同的__LLVM
段,并不是所有这些都表明 Bitcode 的存在。 下面是一个例子:
Section
sectname __bitcode
segname __LLVM
addr 0x00000000000007d0
size 0x0000000000000f10
offset 3360
align 2^4 (16)
reloff 0
nreloc 0
flags 0x00000000
reserved1 0
reserved2 0
Section
sectname __cmdline
segname __LLVM
addr 0x00000000000016e0
size 0x0000000000000069
offset 7216
align 2^4 (16)
reloff 0
nreloc 0
flags 0x00000000
reserved1 0
reserved2 0
__cmdline
部分的存在并不表示 Bitcode 存在,但在搜索__LLVM
时也会找到它。
我观察到 __bitcode 部分只存在于静态库而不是动态库。 因此,一种解决方案是以下命令。
otool -l libDeviceManager.a | grep __LLVM
此外,有时使用胖二进制文件 otool 可能不会给出 __LLVM 段,即使它们存在。 对于这些情况,您可以使用以下命令
otool -arch armv7 -l libDeviceManager.framework/libDeviceManager | grep __LLVM
你可以试试这些命令:
otool -arch armv7 -l libDeviceManager.a | grep bit code
和
otool -arch arm64 -l libDeviceManager.a | grep bitcode
在Targets
设置标志:
启用位码
otool -arch arm64 -l myFramework | grep __LLVM
segname __LLVM
segname __LLVM
我(错误地)期望针对本地 iOS 应用程序构建读取相同的输出。 情况并非如此。 尽管有ENABLE_BITCODE YES
,但同样的命令什么也没产生。 只有当您选择Archive
时,位bitcode
过程bitcode
启动。
这个答案帮助了我:
另一种方法
otool -v -s __LLVM __bundle <binary_path>
//e.g.
otool -v -s __LLVM __bundle "/Users/alex/MyModule.framework/MyModule"
或者在__LLVM
段中找到__bundle
部分
otool -l <binary_path> | grep __bundle
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.