Pregunta

Tengo problemas para entender el compilador gcc proporcionada por OSX 10.6 Snow Leopard, principalmente debido a mi falta de experiencia en entornos de 64 bits.

$ cat >foo.c
main() {}
$ gcc foo.c -o foo
$ file foo
foo: Mach-O 64-bit executable x86_64
$ lipo -detailed_info foo
input file foo is not a fat file
Non-fat file: foo is architecture: x86_64

Sin embargo, mi arquitectura es visto como un tipo Intel i386 (tengo una de las últimas MacBook Core 2 Duo de Intel)

$ arch
i386

y los objetivos del compilador I686-manzana-darwin10

$ gcc --version 
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646)

Por supuesto, si compilo 32 bits puedo obtener un ejecutable de 32 bits.

$ gcc -m32 foo.c -o foo
$ file foo
foo: Mach-O executable i386

pero no consigo el cuadro grande. La configuración por defecto para el compilador es producir ejecutables x86_64, aunque tenga arco diciendo que tengo una máquina de 32 bits (por eso es Core2 64?); incluso si (supongo) Estoy corriendo un kernel de 32 bits; aunque tenga un compilador de orientación de la plataforma i686-manzana-Darwin. ¿Por qué? ¿Cómo pueden funcionar? Debería compilar 64 o 32?

Esta pregunta es debido a mi intento de compilar gcc 4.2.3 en el mac, pero estoy teniendo un montón de problemas con GMP, MPFR y libiberty conseguir (en algunos casos) compilado para x86_64. Debería compilar todo x86_64? Si es así, ¿cuál es el objetivo (no i686-manzana-darwin10 supongo)?

Gracias por la ayuda

¿Fue útil?

Solución

El compilador por defecto en Snow Leopard es gcc4.2, y su arquitectura por defecto es x86_64. La forma típica de construcción de software de Mac es la construcción de múltiples arquitecturas en pasos separados, a continuación, utilizar lipo para combinar los resultados. (Lipo sólo se compila archivos de un solo arco en un archivo de varias arco o arcos de tiras de un archivo multi-arch. No tiene ninguna utilidad en los archivos de un solo arco, como has descubierto.)

El valor de bits del compilador no tiene nada que ver con nada. Usted puede construir binarios de 32 bits con un compilador de 64 bits, y viceversa. (¿Cuál cree que es el "objetivo" del compilador es en realidad su ejecutable, que es diferente.)

El valor de bits del kernel no tiene nada que ver con nada. Puede construir y ejecutar binarios de 64 bits cuando se arranca en un kernel de 32 bits, y viceversa.

Lo que importa es cuando se vincula, si tiene las arquitecturas adecuadas para la vinculación. No se puede vincular de 32 bits binarios se acumula en contra de 64 bits o viceversa. Así que lo importante es ver lo que las arquitecturas de sus bibliotecas de enlace son, asegúrese de que sean coherentes, a continuación, crear su binario de la misma arquitectura para que pueda enlazar con las bibliotecas que tiene.

Otros consejos

i686-manzana-darwin10.0.0 contiene una carpeta x86_64 que no se entiende por la mayoría de las versiones de autotools. En otras palabras, diría que el compilador gcc es por desgracia nada menos que una broma en Snow Leopard. Por las que se empaquetar bibliotecas de 32 bits y 64 bits en i686-manzana-darwin10.0.0 es más allá.

$ ls /usr/lib/gcc
i686-apple-darwin10 powerpc-apple-darwin10

Es necesario cambiar todos sus archivos autotools configurar para manejar mirando en * 86- Darwin directorios y después buscar bibliotecas de 64 bits que se imagina.

Al igual que con el sistema, mi Mac mini dice que su i386 a pesar de que es obviamente el uso de una plataforma de 64 bits, de nuevo otro error desde su distribuido con hardware de 64 bits.

$arch
i386

cadenas de herramientas de Apple son compatibles con varias arquitecturas. Si desea crear un binario de grasa que contiene código x86 y x86_64, entonces usted tiene que pasar el -arch i386 -arch x86_64 parámetros para gcc. El compilador compilar el código dos veces para ambas plataformas de una sola vez.

Adición -arch i386 -arch x86_64 a cflags permitirá compilar GMP, MPFR, y otras cosas para múltiples arcos de una sola vez. La construcción de esa manera libusb trabajó para mí.

Esta respuesta es incorrecta, pero ver comentarios abajo

La verdadera pregunta es ... ¿cómo se obtiene una versión de 32 bits de OSX? Yo no era consciente de que Snow Leopard Had una versión de 32 bits, ya que todos los chips de Intel de Apple son la base 2 o Xeon, que apoyan la arquitectura x86_64.

Ah, y Snow Leopard sólo funciona en los chips de Intel.

Editar:. Al parecer Snow Leopard se inicia en modo de 32 bits

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top