Compilação cruzada de ZeroMQ para ARM para uso em um aplicativo para iPhone MonoTouch definir configurações

Estou tentando usar a biblioteca ZeroMQ em um aplicativo para iPhone desenvolvido em C # usando o MonoTouch. Eu resolvi quase todos os problemas, mas caímos no último obstáculo. Estou usando o ZeroMQ 2.1.10, o C / CLR binding / wrapper e desenvolvendo no Mac OS X 10.6.8. Aqui está a história até agora:

Tentei usar o ZeroMq pela primeira vez em um aplicativo simples do Console Mono C #. Eu construí o ZeroMQ com./configure, entãomake esudo make install, que instala a biblioteca compartilhada/usr/local/lib/libzmq.dylib. A ligação ZeroMq C #clrzmq.dll é um wrapper que usa a funcionalidade 'core' ZeroMq via C Api[DllImport] chamadas.

O aplicativo de teste não funcionou, o que eu descobri ser o padrão ZeroMQ./configure produz uma saída de 64 bits e Mono é de apenas 32 bits. Depois reconstruí o ZeroMQ com

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

Meu aplicativo simples do C # ZeroMq funcionou corretament

Continuando, tentei usar o ZeroMq de dentro de um aplicativo para iPhone no simulador de iPhone. Descobri que o iPhone só permite bibliotecas vinculadas estaticamente (não são permitidas bibliotecas dinâmicas). Isso é alcançado alterando todas as chamadas do wrapper C # para

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

e incluindolibzmq.a diretamente no projeto MonoTouch e definindo argumentos extras de mtouch

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

para garantir que a biblioteca ZeroMQ esteja incluída no aplicativo para iPhon

Ao executar o aplicativo no simulador do iPhone, ele travou, o que eu rastreei em uma chamada feita a partir de umzmq_init() parasocketpair. Finalmente, rastreei isso até a biblioteca ZeroMQ ter sido construída com base nos cabeçalhos e bibliotecas MacOS da minha máquina de compilação, em vez de no SDK do iPhone. Isso foi corrigido 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

Sucesso no iPhone Simulator! O simulador requer bibliotecas estáticas i386 criadas no SDK do simulador do iPhone. Agora eu posso usar a funcionalidade ZeroMQ em um aplicativo para iPhone no Simulador SOMENTE. No entanto, ele não funciona em um iPhone real.

Isso ocorre porque um iPhone real requer uma biblioteca que foi criada para a arquitetura ARM e contra o iPhoneOS SDK rea

(Existe um problema secundário na criação de 3 bibliotecas separadas - i386, ARM6 e ARM7, e na combinação de todas as 3 na biblioteca 'fat' que pode ser usada em qualquer ambiente. Preciso criar o ARM antes de obter para esse problema).

** Finalmente, minha pergunta !! **

O último passo é compilar a compilação da biblioteca ZeroMQ para o ARM. Durante todo o dia, tentei encontrar as opções corretas para isso e estudei todos os exemplos na internet que consigo encontrar, mas nenhum parece ter uma solução que funcion

O mais próximo que tenho de trabalhar é:

./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

Isso produz uma configuração quemake compila o código ZeroMq, mas falha com muitos erros de link, por exemplo

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

Eu tentei muitas outras configurações, mas elas nem passam./configure corretament

Pode alguém me ajudar com um./configure lista de parâmetros para produzir uma biblioteca estática da arquitetura ARM? É tudo o que preciso para que o ZeroMQ funcione em um iPhone rea

E tudo ajuda muito apreciada!

questionAnswers(2)

yourAnswerToTheQuestion