【问题标题】:arm64/x86_64 universal binary created with lipo is missing deployment target使用 lipo 创建的 arm64/x86_64 通用二进制文件缺少部署目标
【发布时间】:2026-01-12 02:10:01
【问题描述】:

上下文

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

问题

我有两个版本的二进制框架:一个为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 部分是否设置了正确的部署目标?谢谢。

【问题讨论】:

    标签: x86 arm64 otool deployment-target lipo


    【解决方案1】:

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

    otool -l -arch x86_64 <pathToUniversalLibrary.a>
    

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

    otool -l arch all <pathToUniversaLibrary.a>
    

    【讨论】:

      最近更新 更多