2010-05-27 12 views
24

Quando passo il flag del compilatore -mmacosx-version-min=10.5, cosa significa? Penso che il risultato sia binario x86, non ppc, ma 32 bit o 64 bit? Sto compilando su snow leopard, quindi l'output binario predefinito è 64 bit. Non sto passando -universal, non è binario universale a 32 bit a 64 bit, penso.cosa implica macosx-version-min?

risposta

19

Questa opzione verrà utilizzata dalle varie macro di disponibilità inserite nelle intestazioni. Ciò significa che è possibile richiedere una versione minima del sistema operativo, anche se si dispone di un SDK più recente (ad esempio target 10.5 con 10.6 SDK). L'utilizzo di un'API 10.6 mentre si utilizza il target 10.5 attiverà un avviso e l'API verrà collegata con un attributo weak_import.

La maggior parte delle intestazioni API di Apple contiene macro disponibilità per ogni classe, metodi, funzioni o enumerazioni per dichiarare per ciascuno di essi:

  • Il sistema operativo minimo supportato
  • La deprecazione
  • L'indisponibilità
  • ...

Le macro assomigliano:

  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
  • ...

quanto riguarda l'architettura, dipende solo sulle architetture disponibili nei binari del SDK. Ad esempio con un SDK 10,5, puoi scegliere come target quattro architetture (Intel/32bit, PowerPC/32bits, Intel/64bits, PowerPC 64bit), mentre con un SDK 10.6, puoi scegliere solo tre architetture (Intel/32bits, PowerPC/32bits, Intel/64bits).

Come si utilizza Snow Leopard, è possibile bersaglio i386 (Intel/32bit), PPC (PowerPC/32bit) o ​​x86_64 (Intel/64bits) molto semplicemente passando un'opzione architettura in questo:

gcc -arch i386 

o come questo (per i progetti di configure-based):

CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure 
+0

Ho dovuto includere #include per ottenere queste macro in semplice C. Ma disponibile.h è anche incluso in stdlib.h –

+1

Vedere anche la risposta di @ Kristian di seguito. Inoltre ho trovato una versione minima uguale e superiore a 10.8 genererà simboli leggermente diversi (il collegamento del simbolo '_start' è cambiato, probabilmente in linea con la nuova libreria C++ predefinita). – Ephemera

4

Attiva gli avvisi del compilatore per i metodi visualizzati dopo Mac OS X 10.5. Non ha niente a che fare con l'architettura.

10

Dal mio test, è anche importante che questa opzione essere passata alla fase di collegamento (come -arch); quindi fa più che influenzare le macro/pre-elaborazione (come si potrebbe dedurre da altre risposte).

Passato alla fase di compilazione ma non passato alla fase di collegamento, ho trovato che le librerie condivise create con 10.6 non venivano caricate sotto 10.5.

12

-mmacosx-version-min=... influenza anche la scelta predefinita dell'implementazione C++ STL (GNU o LLVM) e, a questo proposito, è altrettanto importante per il compilatore e il linker.

+3

Infatti. Questo è particolarmente importante su Mavericks, dove la lib di default C++ STL è cambiata. –

Problemi correlati