macostoolchainmach-o

Determine minimum OSX version a binary was compiled for


When using Clang's or GCC's Darwin backends to create executables for OSX, the flag -mmacosx-version-min=version can be used to set the earliest version of OSX the executable will run on.

Is there any way to trace back from a given executable which flag was used to compile it? I.e. is there a way to determine which minimum OSX version is targeted by a given executable?


Solution

  • Use otool -l /path/to/binary and inspect the LC_VERSION_MIN_MACOSX load command; specifically, the version field.

    For example, a binary compiled with the 10.8 SDK with deployment target (-mmacosx-version-min) 10.8 should have an LC_VERSION_MIN_MACOSX like this:

    Load command 9
          cmd LC_VERSION_MIN_MACOSX
      cmdsize 16
      version 10.8
          sdk 10.8
    

    whereas a binary compiled with the 10.8 SDK with deployment target 10.7 should have an LC_VERSION_MIN_MACOSX load command like this:

    Load command 9
          cmd LC_VERSION_MIN_MACOSX
      cmdsize 16
      version 10.7
          sdk 10.8