2010-07-28 13 views
14

Esto puede ser una pregunta muy tonta, pero soy nuevo en desarrollar en Macs y estoy teniendo dificultades con los binarios universales.¿Cómo compilar bibliotecas universales en Mac OS X?

Tengo una aplicación que estoy compilando en QT Creator, que según lipo está produciendo salidas de arquitectura i386. Según tengo entendido, eso significa que está produciendo salidas Mac OS X de 32 bits.

La aplicación depende de dos bibliotecas externas. Una de estas bibliotecas que estoy compilando llama primero a ./config y luego a make. ./config indica que está "Configurado para darwin-i386-cc". Sin embargo, después de ejecutar make y llamar a lipo sobre el resultado, la arquitectura se informa como x86_64.

De forma similar, tengo otra biblioteca externa. Ese no tiene script de configuración, y lo compilo simplemente llamando a make. La salida de este también es x86_64.

¿Cómo puedo compilar estas dos bibliotecas externas para que produzcan algo compatible con la salida i386 de mi aplicación? Mejor aún, ¿cómo puedo compilar estas dos bibliotecas externas para producir bibliotecas universales, así puedo producir un binario universal desde mi aplicación que funciona tanto en 32 como en 64 bits?

Además, en función del estado actual del mundo de Mac, ¿hay otras plataformas de las que se espera que apunte para crear un binario universal de Mac OS X adecuado y fácil de usar?

Respuesta

13

Finalmente lo tengo funcionando.

Para controlar la arquitectura del objetivo, entre manualmente y edité los Makefiles.

Para uno de ellos, agregué al final de la línea que comienza con CFLAGS: -arch i386 -arch x86_64 -arch ppc Esto produjo un binario universal.

Por el otro, cuando hice lo mismo, la compilación fallaría. Tuve que pasar por un ciclo y poner solo un arco a la vez, y luego, después de producir los tres, llamé a lipo sobre ellos con la bandera de creación para crear un binario universal.

+0

¿sabes si esto también funciona para agregar compatibilidad con iOS – tofutim

+0

ahd qué es esta biblioteca universal, ¿acaso son todas las diferentes compilaciones aplastadas juntas? ¿terminarías con una gran biblioteca entonces? – tofutim

1

No puedo responder la parte principal de su pregunta, porque siempre uso Xcode en lugar de hacer. Pero en cuanto a la última parte, si admite versiones de sistema operativo anteriores a la 10.6, es posible que necesite compilar para PowerPC (código de arco "ppc") también.

+0

¿PowerPC construye algo que una porción significativa del mercado de consumo Mac espera todavía? ¿Se espera un total de 3 plataformas para los binarios universales? – Nantucket

+1

No sé cuál es el porcentaje, pero todavía apoyo PowerPC, y creo que muchos otros productos sí. Y aún no soporto 64 bits, porque mi producto es en parte carbono. Pero si está desarrollando un nuevo producto ahora, no sería irrazonable ir solo a Intel. Considere su mercado: algunos segmentos, como la educación, pueden aferrarse al hardware viejo por más tiempo que otros. – JWWalker

+1

Una cosa más: hasta donde yo sé, el término "binario universal" generalmente significa i386 + ppc, no i386 + x86_64. – JWWalker

7

para ./configure, puede utilizar esto:

./configure CFLAGS = "- i386 arco -arch x86_64" CXXFLAGS = "- i386 arco -arch x86_64" LDFLAGS = "- i386 arco -arch x86_64 "--disable-dependency-tracking

--disable-dependency-tracking es importante o gcc/g ++ se negará a compilar el código.