Android NDK vinculando

Estoy tratando de construir una aplicación de Android que llama a un backend de C ++. Este backend utiliza ZeroMQ para la mensajería. Por lapágina de compilación de Android En la guía ZeroMQ, he construido una cadena de herramientas nativa de ndk versión 6 y la he utilizado para (con éxito) compilar ZeroMQ.

Sin embargo, cuando construyo mi propio .so con las implementaciones JNI, parece que no puedo hacer que todo se cargue correctamente. Específicamente, si llamoSystem.LoadLibrary ("zmq"), esto se completa con éxito, pero si luego llamo * System.LoadLibrary ("my_lib") * Siempre obtengo un UnsatisfiedLinkError quejándose de que:

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

El archivo libmy_lib.so se ha generado de diferentes maneras, cada una sin éxito. Después de generarlo, siempre copio libmy_lib.so (así como libzmq.so) a la carpeta de mi proyecto de 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

Con cada una de estas opciones intenté ambas llamadas explícitamenteSystem.LoadLibrary ("zmq") Antes de cargar mi propia biblioteca y no. Nada variaba los resultados. El uso de nm confirma que, al menos en el caso de la opción # 2, el símbolo que falta * zmq_msg_init * está presente en libmy_lib.so.

¿Alguna idea de por qué no puede encontrar los símbolos ZeroMQ que están vinculados?

Respuestas a la pregunta(1)

Su respuesta a la pregunta