Link do Android NDK

Eu estou tentando construir uma aplicação android que chama em um backend C ++. Este backend usa o ZeroMQ para mensagens. Por opágina de compilação do android no guia ZeroMQ, construí um conjunto de ferramentas nativo do ndk versão 6 e usei isso para (com êxito) construir o ZeroMQ.

No entanto, quando eu construo o meu próprio .so com as implementações JNI, não consigo fazer tudo carregar corretamente. Especificamente, se eu ligarSystem.LoadLibrary ("zmq"), isso é concluído com sucesso, mas se eu chamar * System.LoadLibrary ("my_lib") * sempre recebo um UnsatisfiedLinkError reclamando que:

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

O libmy_lib.so foi gerado de várias maneiras diferentes, cada uma sem sucesso. Após gerá-lo, eu sempre copio libmy_lib.so (assim como libzmq.so) para a pasta do meu projeto 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

Com cada uma dessas opções, tentei chamar explicitamenteSystem.LoadLibrary ("zmq") antes de carregar minha biblioteca e não. Nada variou os resultados. Usar nm confirma que, pelo menos no caso da opção # 2, o símbolo ausente * zmq_msg_init * está de fato presente em libmy_lib.so.

Alguma idéia de por que não consegue encontrar os símbolos ZeroMQ que estão ligados?

questionAnswers(1)

yourAnswerToTheQuestion