|
由於 macOS 的 CPU 正處於 Intel Architecture 跟 ARM Architecture 的交會時代,導致許多 macOS 的開發人員忙於 x86_64 和 arm64 間轉換,所幸 Apple 提供了 universal 的編譯架構,讓 framework、app、dylib 等,能夠兼容兩種不同架構 CPU 的 macOS。那麼查看檔案是否為 universal 架構就變成一個重要的事情了。 |
---|
查詢方法
查詢方法有兩種,都是在 CLI (command line interface)下執行,分別是指令 lipo 跟指令 file。
lipo
透過底下指令可查詢檔案的架構:
lipo -archs [Filename]底下是查詢 dylib 的範例:
[/Applications/Datacolor/SpyderXElite/SpyderXElite.app/Contents/Frameworks]$ lipo -archs CDisplay.dylib x86_64 arm64
顯示 x86_64 arm64 即代表為 universal,此外,x86_64 為 Intel 架構,arm64 則為 ARM 架構。下面為查詢 framework 的範例:
[/Applications/Datacolor/SpyderXElite/SpyderXElite.app/Contents/Frameworks]$ lipo -archs XojoFramework.framework/XojoFramework x86_64 arm64
顯示結果為 x86_64 arm64,為 universal。需注意的是 framework 查詢的目標檔案是位於 framework 內的同名不帶副檔名的檔案(或 reference)。
file
透過底下指令可查詢檔案的架構:
file [Filename]底下是透過 file 查詢 dylib 的範例:
[/Applications/Datacolor/SpyderXElite/SpyderXElite.app/Contents/Frameworks]$ file CDisplay.dylib CDisplay.dylib: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit dynamically linked shared library x86_64] [arm64:Mach-O 64-bit dynamically linked shared library arm64] CDisplay.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 CDisplay.dylib (for architecture arm64): Mach-O 64-bit dynamically linked shared library arm64
結果顯示將各種架構都顯示一遍,並同時顯示函式庫的類型,像是動態函式庫或是靜態函式庫,這邊顯示為 dynamic libray,動態函式庫。底下為透過 file 去查詢 framework 的範例:
[/Applications/Datacolor/SpyderXElite/SpyderXElite.app/Contents/Frameworks]$ file XojoFramework.framework/XojoFramework XojoFramework.framework/XojoFramework: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit dynamically linked shared library x86_64] [arm64] XojoFramework.framework/XojoFramework (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 XojoFramework.framework/XojoFramework (for architecture arm64): Mach-O 64-bit dynamically linked shared library arm64
顯示結果為 universal並且為 dynamic library。
No comments:
Post a Comment