Кросс-компиляция ZeroMQ в ARM для использования в приложении MonoTouch для iPhone. Настройка параметров

Я пытаюсь использовать библиотеку ZeroMQ в приложении для iPhone, разработанном на C # с использованием MonoTouch. Я решил почти все проблемы, но упал в последний момент. Я использую ZeroMQ 2.1.10 и привязку / оболочку C # CLR, а также разрабатываю для Mac OS X 10.6.8. Вот история на данный момент:

Сначала я попытался использовать ZeroMq в простом консольном приложении Mono C #. Я построил ZeroMQ с./configure, тогдаmake а такжеsudo make install, который устанавливает общую библиотеку/usr/local/lib/libzmq.dylib, Связывание ZeroMq C #clrzmq.dll это обертка, которая использует «основные» функции ZeroMq через C Api[DllImport] звонки.

Тестовое приложение не работало, и я понял, что стандарт ZeroMQ./configure выдает 64-битный вывод, а Mono только 32-битный. Затем я перестроил ZeroMQ с

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

Тогда мое простое приложение на C # ZeroMq работало правильно.

Затем я попытался использовать ZeroMq из приложения для iPhone в симуляторе iPhone. Я обнаружил, что iPhone позволяет только статически связанные библиотеки (динамические библиотеки не допускаются). Это достигается путем изменения всех вызовов оболочки C # на

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

и в том числеlibzmq.a непосредственно в проекте MonoTouch и настройке дополнительных аргументов mtouch

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

чтобы убедиться, что библиотека ZeroMQ включена в приложение iPhone.

При запуске приложения в симуляторе iPhone оно вылетело, что я проследил до звонка, сделанного сzmq_init() вsocketpair, Я наконец-то проследил это до библиотеки ZeroMQ, созданной на основе заголовочных файлов и библиотек MacOS моей сборочной машины, а не на iPhone SDK. Это было исправлено

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

Удачи в симуляторе iPhone! Для симулятора требуются статические библиотеки i386, встроенные в SDK симулятора iPhone. Теперь я могу использовать функциональность ZeroMQ только в приложении для iPhone в симуляторе. Однако он не работает на реальном iPhone.

Это связано с тем, что для настоящего iPhone требуется библиотека, созданная для архитектуры ARM, а не для реального iPhoneOS SDK.

(Существует побочная проблема создания 3 отдельных библиотек - i386, ARM6 и ARM7 и объединения всех 3 в «толстую» библиотеку, которую можно использовать в любой среде. Мне нужно иметь возможность собрать для ARM, прежде чем я доберусь до Эта проблема).

** Наконец-то мой вопрос !! **

Последний шаг - это кросс-компиляция сборки библиотеки ZeroMQ для ARM. Я целый день пытался придумать правильные переключатели для этого и изучил все примеры в интернете, которые я могу найти, но ни у одного, похоже, нет решения, которое работает.

Самое близкое, что я получил к работе:

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

Это производит конфиг, которыйmake компилирует код ZeroMq, но завершается неудачно с большим количеством ошибок ссылок, например:

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

Я пробовал много других конфигураций, но они даже не проходят./configure правильно.

Может ли кто-нибудь помочь мне с подходящим./configure список параметров для создания статической библиотеки архитектуры ARM? Это все, что мне нужно, чтобы ZeroMQ работал на настоящем iPhone.

И вся помощь очень ценится!

Ответы на вопрос(2)

Ваш ответ на вопрос