2017-01-06 4 views
0

Im Wesentlichen ist die Frage das. Ich habe ein Java-Programm, von dem ich eine JNI-Bibliothek laden. Kann diese JNI-Bibliothek mit der gemeinsamen Bibliothek libjvm.so von HotSpot verbunden werden und dementsprechend Funktionen aufrufen, die nur für HotSpot - also außerhalb von jni.h - gelten? Verknüpfen von JNI-Code mit der JVM

Wenn ich versuche, und tue so auf einfache Art und Weise, ist das Ergebnis das Programm abstürzt mit:

java: symbol lookup error: /path/to/libtest.so: undefined symbol: _ZNK7oopDesc5klassEv

Dies gibt das Aussehen der Fehler geladen werden, da es nicht den HotSpot-unique lösen oopDesc-Klasse. Irgendwelche Vorschläge, um eine Bibliothek zu erstellen, die so verlinkt werden kann?

Edit: auch libjava.so Verknüpfung Versuchte zur Compile-Zeit ohne Erfolg.

Antwort

0

Wenn die libjvm.so, die Sie laden möchten, anders ist als die libjvm.so, die implizit von der Java-EXE verknüpft ist, wird dies nicht funktionieren, weil sie Konflikte verursachen, wenn Sie etwas wie diese trick oder das tun trick. Wird die Java-EXE dieselbe libjvm.so laden, die Ihre Bibliothek referenzieren möchte? Sie sollten in der Lage sein zu sagen, welches .so von java EXE geladen wird, wie beschrieben here.

Wenn die Java EXE und Ihre Bibliothek beide wollen .so und es funktioniert immer noch nicht, ich weiß nicht, was ich sagen soll.

+0

Danke, ich habe das getestet, aber es war nicht das Problem. Tritt immer noch auf, selbst wenn Sie zu den genau gleichen Bibliotheken verbinden. – 0x277F

+0

Dies könnte verwandt sein? https://bugs.openjdk.java.net/browse/JDK-8037962 – Wheezil