Łączenie Android NDK

Próbuję zbudować aplikację dla systemu Android, która wywołuje backend C ++. Ten backend używa ZeroMQ do przesyłania wiadomości. Zastrona budowania Androida w przewodniku ZeroMQ zbudowałem natywny zestaw narzędzi ndk w wersji 6 i użyłem tego do (pomyślnego) zbudowania ZeroMQ.

Jednakże, gdy tworzę własne .so za pomocą implementacji JNI, nie wydaje mi się, aby wszystko ładowało się poprawnie. W szczególności, jeśli zadzwonięSystem.LoadLibrary ("zmq"), kończy się to pomyślnie, ale gdybym następnie wywołał * System.LoadLibrary („my_lib”) * Zawsze otrzymuję UnsatisfiedLinkError, który narzeka, że:

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

Libmy_lib.so zostało wygenerowane na kilka różnych sposobów, bez żadnego powodzenia. Po wygenerowaniu zawsze kopiuję libmy_lib.so (a także libzmq.so) do folderu mojego projektu 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

Z każdą z tych opcji próbowałem wywołać obaSystem.LoadLibrary ("zmq") przed załadowaniem własnej biblioteki, a nie. Nic nie zmieniło wyników. Użycie nm potwierdza, że ​​przynajmniej w przypadku opcji # 2, brakujący symbol * zmq_msg_init * jest rzeczywiście obecny w libmy_lib.so.

Jakieś pomysły, dlaczego nie można znaleźć symboli ZeroMQ, które są połączone?

questionAnswers(1)

yourAnswerToTheQuestion