确定编译二进制文件的最小OSX版本

时间:2013-06-17 08:33:52

标签: macos toolchain mach-o

当使用Clang或GCC的Darwin后端为OSX创建可执行文件时,标志-mmacosx-version-min=version可用于设置可执行文件将运行的最早版本的OSX。

有没有办法从给定的可执行文件中追溯哪个标志用于编译它?即有没有办法确定给定可执行文件所针对的最小OSX版本?

2 个答案:

答案 0 :(得分:39)

使用otool -l /path/to/binary并检查LC_VERSION_MIN_MACOSX加载命令;特别是版本字段。

例如,使用具有部署目标(-mmacosx-version-min)10.8的10.8 SDK编译的二进制文件应该具有LC_VERSION_MIN_MACOSX,如下所示:

Load command 9
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.8
      sdk 10.8

而使用带有部署目标10.7的10.8 SDK编译的二进制文件应该具有LC_VERSION_MIN_MACOSX加载命令,如下所示:

Load command 9
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.7
      sdk 10.8

答案 1 :(得分:5)

当我构建现代 macOS 可执行文件时,未列出接受的答案中提到的加载命令。但是 LC_BUILD_VERSION 确实包含 minossdk 字段:

Load command 10
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform 1
    minos 11.0
      sdk 11.1
   ntools 1
     tool 3
  version 609.8