Android NDK-Verknüpfung

Ich versuche, eine Android-Anwendung zu erstellen, die ein C ++ - Backend aufruft. Dieses Backend verwendet ZeroMQ für Messaging. Per dasAndroid Build-Seite Im ZeroMQ-Handbuch habe ich eine native Toolchain von ndk Version 6 erstellt und diese verwendet, um ZeroMQ (erfolgreich) zu erstellen.

Wenn ich jedoch meine eigene .so-Datei mit den JNI-Implementierungen erstelle, kann ich scheinbar nicht alles richtig laden. Konkret, wenn ich anrufeSystem.LoadLibrary ("zmq")Dies wird erfolgreich abgeschlossen, aber wenn ich dann * System.LoadLibrary ("my_lib") * aufrufe, wird immer ein UnsatisfiedLinkError angezeigt, der Folgendes beanstandet:

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

Die Datei libmy_lib.so wurde auf verschiedene Arten generiert, jede ohne Erfolg. Nach dem Generieren kopiere ich immer libmy_lib.so (sowie libzmq.so) in den Ordner meines Android-Projekts: 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

Bei jeder dieser Optionen habe ich versucht, beide explizit aufzurufenSystem.LoadLibrary ("zmq") vor dem Laden meiner eigenen Bibliothek und nicht. Nichts veränderte die Ergebnisse. Die Verwendung von nm bestätigt, dass zumindest im Fall von Option 2 das fehlende Symbol * zmq_msg_init * tatsächlich in libmy_lib.so vorhanden ist.

Irgendwelche Ideen, warum die mit ZeroMQ verknüpften Symbole nicht gefunden werden können?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage