Ich bin derzeit kämpfen, um eine Dll für JNI verwenden, mit Eclipse CDT und MinGW zu kompilieren.
Nach einem Tutorial habe ich eine Java-Klasse erstellt, die native Methoden deklariert, dann mit javah die entsprechende Header-Datei abgerufen und in eine C++-Klasse implementiert.
Der C++-Code ist sehr einfach und die Kompilierung funktioniert, aber wenn ich die Bibliothek in die Java-Klasse lade, bekomme ich diesen Fehler:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Main.integerMethod(I)I
at Main.integerMethod(Native Method)
at Main.main(Main.java:12)
Ich habe die DLL "erforscht" und herausgefunden, dass die Methoden, die aufgerufen werden sollen, alle ein Suffix wie "@14" haben. Das Problem ist, dass ich bereits die Compileroption -Wl,--kill-at verwende, die diese sehr peinlichen Tags entfernen sollte... Warum funktioniert es also nicht?
Das Kompilierungsprotokoll lautet wie folgt:
**** Rebuild of configuration DLL for project JniCTest ****
**** Internal Builder is used for build ****
g++ -IC:\Program Files\Java\jdk1.6.0_13\include -IC:\Program Files\Java\jdk1.6.0_13\include\win32 -O3 -Wall -c -fmessage-length=0 -mno-cygwin -D__int64=long long -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -oMain.o ..\Main.cpp
g++ -o libJniCTest.dll -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -shared -olibJniCTest.dll Main.o
Build complete for project JniCTest
Time consumed: 375 ms.
Stimmt etwas mit den Compiler-Optionen nicht? Danke für jede Hilfe.