Alle Führer zu JNI Ich habe gesehen (zB JNI runtime linking) empfehlen, dass ich meine JNI Bibliotheken gegen libjvm.so
verlinken:libjvm.so: zum Verknüpfen oder nicht zum Verknüpfen?
$ gcc -I${JAVA_HOME}/include -c -o test.o test.c
$ gcc -shared -o libtest.so test.o -L${JAVA_HOME}/jre/lib/i386/server -Wl,-rpath,${JAVA_HOME}/jre/lib/i386/server -ljvm
Wenn meine benutzerdefinierte Bibliothek ist in C++ geschrieben und verwendet die C++ JNI API, kann ich klar siehe die entsprechenden schwachen Symbole in nm -C
Ausgabe:
00000690 W JNIEnv_::ThrowNew(_jclass*, char const*)
00000672 W JNIEnv_::FindClass(char const*)
Dennoch, wenn ich nicht Erwähnung -ljvm
auf der Kommandozeile tun , setzt die benutzerdefinierten native Bibliothek gut zu funktionieren, wahrscheinlich, weil libjvm.so
wird automatisch von beliebigen Java-Prozess geladen.
Können Sie mir sagen, wenn es absolut notwendig ist, explizit gegen libjvm.so
zu verknüpfen?