2013-06-17 16 views
14

Quando si utilizzano i backend Darwin di Clang o GCC per creare file eseguibili per OSX, è possibile utilizzare il flag -mmacosx-version-min=version per impostare la prima versione di OSX su cui verrà eseguito l'eseguibile.Determinare la versione minima di OSX è stato compilato un binario per

C'è un modo per rintracciare da un determinato eseguibile quale flag è stato utilizzato per compilarlo? Cioè c'è un modo per determinare quale versione minima di OSX è mirata da un dato eseguibile?

+1

Per la cronaca, Apple non ha contribuito a GCC poiché la sua licenza è stata modificata in GPLv3. Quando possibile, usare Clang/LLVM. –

risposta

27

Utilizzare otool -l /path/to/binary e controllare il comando di caricamento LC_VERSION_MIN_MACOSX; in particolare, il campo versione.

Ad esempio, un binario compilato con il 10,8 SDK con destinazione di distribuzione (-mmacosx-version-min) 10.8 dovrebbe avere un LC_VERSION_MIN_MACOSX simili:

Load command 9 
     cmd LC_VERSION_MIN_MACOSX 
    cmdsize 16 
    version 10.8 
     sdk 10.8 

mentre un binario compilato con il 10,8 SDK con distribuzione di destinazione 10.7 dovrebbe averecomando di caricamento in questo modo:

Load command 9 
     cmd LC_VERSION_MIN_MACOSX 
    cmdsize 16 
    version 10.7 
     sdk 10.8 
+0

Esiste un modo per ottenere queste informazioni per le librerie statiche (file ".a")? –

+0

Funziona anche per le librerie statiche (file .a). Vedrai tale comando di caricamento per ogni oggetto nella libreria. C'è una bella applicazione UI per Mac chiamata "MachOView" che consente una comoda navigazione dei binari e una facile ricerca di questi comandi di caricamento. –