Android NDK связывание

Я пытаюсь создать приложение для Android, которое обращается к бэкэнду C ++. Этот бэкэнд использует ZeroMQ для обмена сообщениями. За страница сборки Andro в руководстве по ZeroMQ я создал собственный набор инструментов ndk версии 6 и использовал его для (успешного) построения ZeroMQ.

Однако когда я создаю свой собственный .so с реализациями JNI, я не могу заставить все загружаться правильно. В частности, если я позвоню System.loadLibrary ( "zmq"), это успешно завершается, но если я затем вызываю * System.LoadLibrary ("my_lib") *, я всегда получаю UnsatisfiedLinkError, жалуясь на то, что:

Cannot load library reloc_library[1244]:   29 cannot locate zmq_msg_init'...

The libmy_lib.so был сгенерирован несколькими разными способами, но безуспешно. После генерации я всегда копирую libmy_lib.so (а также libzmq.so) в папку моего проекта Android: libs / armeabi /

# Compile all object files - this part was done for all options
/opt/android-toolchain/bin/arm-linux-androideabi-g++ -fpic -c Client_Events.cpp \
Client Wrapper.cpp jni.cpp -I /opt/android-root/include/ -I /my/project/specific/stuff

# Option 1 - Don't link the lib in at all
/opt/android-toolchain/bin/arm-linux-androideabi-g++ -shared  \
-Wl,-soname,libmy_lib.so -o libmy_lib.so jni.o Client_Events.o Client_Wrapper.o 

# Option 2 - Link ZeroMQ in statically
/opt/android-toolchain/bin/arm-linux-androideabi-g++ -shared  \
-Wl,-soname,libmy_lib.so -o libmy_lib.so jni.o Client_Events.o Client_Wrapper.o \
libzmq.a libstdc++.a -Wl,--whole-archive    

# Option 3 - Explicitly link ZeroMQ in dynamically
/opt/android-toolchain/bin/arm-linux-androideabi-g++ -shared  \
-Wl,-soname,libmy_lib.so -o libmy_lib.so jni.o Client_Events.o Client_Wrapper.o \
-L /opt/android-root/lib/ -lzmq

С каждым из этих вариантов я попробовал оба явно вызвать System.loadLibrary ( "zmq") до загрузки моей собственной библиотеки и нет. Ничто не изменило результаты. Использование nm подтверждает, что, по крайней мере, в случае варианта # 2, отсутствующий символ * zmq_msg_init * действительно присутствует в libmy_lib.so.

Есть идеи, почему он не может найти символы ZeroMQ, которые связаны между собой?

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

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