arm64/x86_64 使用 lipo 创建的通用二进制文件缺少部署目标

arm64/x86_64 universal binary created with lipo is missing deployment target

上下文

我正在将我的 Mac 应用程序用作新 Apple Silicon Macs 的通用二进制文件的几个 libraries/frameworks。

问题

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

otool -lv myIntelX86Library.a

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

Load command 1
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.12
sdk 11.0

运行 arm64 二进制文件上的相同命令会生成 11.0 的最低版本,但这也是预期的,因为没有早期版本的 macOS 支持 arm64

但是:

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

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

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

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

嗯,和往常一样,这是 RTFM。当 运行 在通用二进制文件上时,otool 的默认设置是仅打印主机体系结构的信息。要在 arm64 机器上 运行ning 时打印 x86_64 架构的加载命令:

otool -l -arch x86_64 <pathToUniversalLibrary.a>

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

otool -l arch all <pathToUniversaLibrary.a>