2011-12-14 8 views
5

Dado que Apple no es compatible con GCC 4.6 o GCC 4.7, acabo de cambiar a la compilación de MacPorts de GCC 4.6/4.7. Sin embargo, tuve un problema para construir mi código en la arquitectura "Universal".¿Puedo compilar el código universal usando el GCC de Macports?

Tradicionalmente, haría g++ -arch i386 -arch x86_64 ... para compilar mi binario para al menos arquitectura i386/x86_64. Hice una búsqueda y me di cuenta de que la opción de búsqueda solo es compatible con los compiladores de Apple. Así que, por supuesto, no funcionó con Macports '. Lo mejor que puedo hacer es usar las opciones -m32/-m64 para especificar una arquitectura que quiero. Sin embargo, esto solo producirá un formato binario en formato i386 o x86_64. Lo que realmente quiero es obtener un archivo binario en ambas arquitecturas (Universal) tal como se hizo con los compiladores originales de GCC.

¿Esto no es compatible o es un problema conocido? He intentado toda la noche buscando respuestas en Google, pero no he obtenido nada útil. Entonces, ¿empiezo a dudar si soy el único que tiene este problema y me he perdido algo realmente importante para que funcione? Realmente aprecio si alguien puede darme algunas sugerencias.

BTW. He instalado las variantes gcc46 +universal, pero no produjo nada realmente universal excepto la compilación de binarios separados para cada arquitectura.

Xing.

Respuesta

3

Puede combinar binarios con diferentes arquitecturas en un solo universal usando lipo.

+0

Gracias que trabaja. No sabía que había lipo, creo que todo lo que realmente necesito es lipo. Necesito cambiar algunos de mis Makefiles para detener las banderas de arco y usar lipo para producir código universal ahora :) –

6

Oh, acabo de tener este problema y pasé una gran cantidad de tiempo en él. Resulta que la versión de Apple de GCC 4.2.1 es en realidad un envoltorio que respeta algunas banderas (especialmente la bandera de búsqueda) y luego utiliza lipo para volver a unir los archivos de objeto en un objeto gordo. Modifiqué un poco este controlador para que envolviera a macports GCC sin dejar de honrar el indicador -arch y producir archivos de objetos de arco múltiple (para Intel de 32 bit y 64 bit de todos modos).

Me acaba de publicar la lista más completa de escritura sobre cómo hacer esto:

http://thecoderslife.blogspot.com/2015/07/building-with-gcc-46-and-xcode-4.html

Cuestiones relacionadas