[英]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.