0

语境

我正在将我的 Mac 应用程序使用的几个库/框架转换为新 Apple Silicon Macs 的通用二进制文件。

问题

我有两个版本的二进制框架:一个x86_64arm64. 我总是检查框架otool以确保正确设置了最小部署目标。为此,我使用以下命令:

otool -lv myIntelX86Library.a

在输出中,我看到了我所期望的:

Load command 1
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.12
sdk 11.0

arm64在二进制文件上运行相同的命令11.0会生成arm64.

然而:

一旦我将这两个库组合成一个胖二进制文件,使用:

lipo -create <pathToIntel.a> <pathToArm.a> -output <pathToUniversal.a>

当我otool -lv在通用二进制文件上运行时,我再也无法LC_VERSION_MIN_MACOSX在输出中的任何位置找到该命令。它没有出现。

如何验证x86_64胖二进制文件的部分是否设置了正确的部署目标?谢谢你。

4

1 回答 1

3

好吧,像往常一样,它是 RTFM。在通用二进制文件上运行时,otool默认情况下仅打印主机架构的信息。在机器上运行时打印x86_64架构的加载命令arm64

otool -l -arch x86_64 <pathToUniversalLibrary.a>

或者,一次打印所有平台的信息:

otool -l arch all <pathToUniversaLibrary.a>
于 2020-11-20T18:36:16.457 回答