2010-05-27 9 views
24

Cuando paso la bandera del compilador -mmacosx-version-min=10.5, ¿qué significa? Creo que implica que el resultado binario es x86, no ppc, pero ¿son 32 bits o 64 bits? Estoy compilando en leopardo de las nieves, por lo que el binario de salida predeterminado es de 64 bits. No estoy pasando -universal, no es binario universal de 32 bits a 64 bits, creo.¿qué implica macosx-version-min?

Respuesta

19

Esta opción será utilizada por las diversas macros de disponibilidad colocadas en los encabezados. Esto significa que puede requerir una versión mínima del sistema operativo, incluso si tiene un SDK más reciente (es decir, el objetivo 10.5 con un SDK de 10.6). El uso de una API 10.6 mientras apuntas a 10.5 activará una advertencia y la API se vinculará con un atributo weak_import.

La mayoría de las cabeceras API de Apple contiene macros sobre la disponibilidad para cada clase, métodos, funciones o enumeraciones con el fin de declarar para cada uno de ellos:

  • El sistema operativo mínimo soportado
  • La desaparición
  • La indisponibilidad
  • ...

Las macros se parecen:

  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
  • ...

En cuanto a la arquitectura, sólo depende de las arquitecturas disponibles en los binarios del SDK. Por ejemplo, con un SDK 10.5, puede orientar cuatro arquitecturas (Intel/32bits, PowerPC/32bits, Intel/64bits, PowerPC 64bits), mientras que con un SDK 10.6, solo puede apuntar a tres arquitecturas (Intel/32bits, PowerPC/32bits, Intel/64bits).

Como está usando Snow Leopard, puede orientar i386 (Intel/32bits), PPC (PowerPC/32bits) o x86_64 (Intel/64bits) de manera muy sencilla mediante el paso de una opción arquitectura como esto:

gcc -arch i386 

o así (para los proyectos basados ​​en configuración):

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

Tuve que incluir # para obtener estas macros en C. simple. Pero available.h también se incluye en stdlib.h –

+1

Consulte también la respuesta de @ Kristian a continuación. Además, he encontrado que una versión mínima es igual o superior a 10.8 generará símbolos ligeramente diferentes (la vinculación del símbolo '_start' ha cambiado, probablemente en línea con la nueva biblioteca predeterminada de C++). – Ephemera

4

Activa las advertencias del compilador para los métodos que aparecieron después de Mac OS X 10.5. No tiene nada que ver con la arquitectura.

10

de mis pruebas, también es importante que esta opción se pasa al paso de vinculación (como -arch); por lo que hace más que afectar las macros/preprocesamiento (como se podría deducir de otras respuestas).

Cuando se pasó al paso de compilación pero no se pasó al paso de enlace, encontré que las bibliotecas compartidas compiladas con 10.6 no se cargarían por debajo de 10.5.

12

-mmacosx-version-min=... también influye en la elección predeterminada de C++ STL implementación (GNU o LLVM), y en este sentido, es igualmente importante para el compilador y el vinculador.

+3

De hecho. Esto es particularmente importante en Mavericks, donde cambió la lib de C++ STL predeterminada. –

Cuestiones relacionadas