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>
上下文
我正在将我的 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>