Compilación cruzada de ZeroMQ a ARM para usar en una aplicación de iPhone MonoTouch para configurar los ajustes

Estoy intentando usar la biblioteca ZeroMQ en una aplicación para iPhone desarrollada en C # usando MonoTouch. He resuelto casi todos los problemas, pero he caído en el último obstáculo. Estoy usando ZeroMQ 2.1.10, y el enlace / envoltorio C # CLR, y estoy desarrollando en Mac OS X 10.6.8. Aquí está la historia hasta ahora:

Primero intenté usar ZeroMq en una aplicación simple de consola Mono C #. Construí ZeroMQ con./configure, luegomake ysudo make install, que instala la biblioteca compartida/usr/local/lib/libzmq.dylib. El enlace ZeroMq C #clrzmq.dll es un contenedor que utiliza la funcionalidad 'Core' ZeroMq a través de C Api[DllImport] llamadas.

La aplicación de prueba no funcionó, lo que supuse es que el ZeroMQ estándar./configure produce una salida de 64 bits, y Mono tiene solo 32 bits. Luego reconstruí ZeroMQ con

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

Mi simple aplicación C # ZeroMq funcionó correctamente.

Moviendo, intenté usar ZeroMq desde una aplicación de iPhone en el simulador de iPhone. Descubrí que el iPhone solo permite bibliotecas vinculadas estáticamente (no se permiten bibliotecas dinámicas). Esto se logra cambiando todas las llamadas de contenedor C # a

[DllImport("__Internal", CallingConvention = CallingConvention.Cdecl)]

e incluyendolibzmq.a directamente en el proyecto MonoTouch y estableciendo argumentos mtouch adicionales

-cxx -gcc_flags "-L${ProjectDir} -lzmq -force_load ${ProjectDir}/libzmq.a"

para garantizar que la biblioteca ZeroMQ esté incluida en la aplicación para iPhone.

Cuando ejecuté la aplicación en el simulador de iPhone, se bloqueó, lo que rastreé hasta una llamada realizada desde unazmq_init() asocketpair. Finalmente rastreé esto a la biblioteca ZeroMQ que se creó con los encabezados y bibliotecas MacOS de mi máquina de compilación, en lugar de con el SDK de iPhone. Esto fue arreglado por

./configure CFLAGS="-O -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk" CXXFLAGS="-O -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk" LDFLAGS="-arch i386" --disable-dependency-tracking

¡Éxito en el simulador de iPhone! El simulador requiere bibliotecas estáticas i386 integradas en el SDK del simulador de iPhone. Ahora puedo usar la funcionalidad ZeroMQ dentro de una aplicación de iPhone SOLO en el simulador. Sin embargo, no funciona en un iPhone real.

Esto se debe a que un iPhone real requiere una biblioteca construida para la arquitectura ARM y contra el SDK de iPhoneOS real.

(Existe un problema secundario de construir 3 bibliotecas separadas: i386, ARM6 y ARM7, y combinar las 3 en una biblioteca 'gorda' que se puede usar en cualquier entorno. Necesito poder construir para ARM antes de obtener a este problema).

** ¡Finalmente, mi pregunta! **

El último paso es compilar de forma cruzada la compilación de la biblioteca ZeroMQ en ARM. He estado intentando todo el día encontrar los interruptores correctos para esto, y estudié todos los ejemplos en Internet que puedo encontrar, pero ninguno parece tener una solución que funcione.

Lo más cerca que tengo de trabajar es:

./configure CXX=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2
CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
LD=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld CFLAGS="-O -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk"
CXXFLAGS="-O -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk"
--disable-dependency-tracking --host=arm-apple-darwin10
LDFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk" 
AR=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar 
AS=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/as 
LIBTOOL=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool 
STRIP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/strip 
RANLIB=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ranlib

Esto produce una configuración quemake compila el código ZeroMq, pero falla con muchos errores de enlace, por ejemplo

ar: libzmq_la-clock.o: No such file or directory

He probado muchas otras configuraciones, pero ni siquiera pasan./configure correctamente.

Puede alguien ayudarme con un @ adecuad./configure lista de parámetros para producir una biblioteca estática de arquitectura ARM? Esto es todo lo que necesito para que ZeroMQ funcione en un iPhone real.

¡Y toda ayuda muy apreciada!

Respuestas a la pregunta(4)

Su respuesta a la pregunta