Macos 确定二进制文件编译的最低OSX版本
使用Clang或GCC的Darwin后端为OSX创建可执行文件时,可以使用标志Macos 确定二进制文件编译的最低OSX版本,macos,toolchain,mach-o,Macos,Toolchain,Mach O,使用Clang或GCC的Darwin后端为OSX创建可执行文件时,可以使用标志-mmacosx version min=version设置可执行文件将运行的OSX的最早版本 有没有办法从给定的可执行文件追溯到编译它时使用了哪个标志?也就是说,是否有办法确定给定可执行文件的目标OSX最低版本?使用otool-l/path/to/binary并检查LC\u version\u MIN\u MACOSXload命令;具体来说,是版本字段 例如,使用部署目标为(-mmacosx version min)
-mmacosx version min=version
设置可执行文件将运行的OSX的最早版本
有没有办法从给定的可执行文件追溯到编译它时使用了哪个标志?也就是说,是否有办法确定给定可执行文件的目标OSX最低版本?使用
otool-l/path/to/binary
并检查LC\u version\u MIN\u MACOSX
load命令;具体来说,是版本字段
例如,使用部署目标为(-mmacosx version min
)10.8的10.8 SDK编译的二进制文件应具有如下LC\u version\u min\u MACOSX
:
Load command 9
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.8
sdk 10.8
Load command 9
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.7
sdk 10.8
而使用部署目标为10.7的10.8 SDK编译的二进制文件应具有如下LC\u VERSION\u MIN\u MACOSX
load命令:
Load command 9
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.8
sdk 10.8
Load command 9
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.7
sdk 10.8
在构建现代macOS可执行文件时,接受答案中提到的load命令没有列出。但是
LC\u BUILD\u VERSION
确实包含minos
和sdk
字段:
Load command 10
cmd LC_BUILD_VERSION
cmdsize 32
platform 1
minos 11.0
sdk 11.1
ntools 1
tool 3
version 609.8
记录在案的是,自从GCC的许可证改为GPLv3后,苹果就没有向GCC捐款。如果可能,请使用Clang/LLVM。是否有任何方法可以获取静态库(“.a”文件)的此信息?这也适用于静态库(.a文件)。您将看到库中每个对象都有这样的load命令。Mac有一个很好的UI应用程序叫做“MachOView”“这样可以轻松浏览二进制文件,并轻松搜索这些加载命令。哇,谢谢!然而,有没有办法通过macOS内置的库存工具来了解这些信息?”“otool”是开发工具的一部分。是否有一个库或系统api以编程方式执行此操作?@electronic_coder是的,有一个api以编程方式执行此操作。看看耳石()的来源,我也注意到了。查看这两种类型输出的屏幕截图,来自在同一个CI运行中构建的二进制文件,但使用不同的工具(PyInstaller vs Rust):您没有看到
LC\u VERSION\u MIN\u MACOSX
的原因可能是您的二进制文件用于架构arm64或universal,并且您有一台Apple Silicon Mac。请注意,如果是通用二进制文件,minos
字段低于11.0,则不一定反映实际的最小SDK。对通用二进制文件使用otool-l-arch x86\u 64/path/to/binary
。啊,我确实在使用苹果硅。我也没有看到它,在使用big surok的英特尔上,看起来如果我使用CFLAGS=-mmacosx version min=10.10构建,我确实在二进制文件中看到了LC\u version\u min\u MACOSX,而我丢失了LC\u build\u version