Java で JNI をテストすると、次の明示的なエラーが発生します。
Exception in thread "main" java.lang.UnsatisfiedLinkError: Italk2learn.hello()V
at Italk2learn.hello(Native Method)
at Italk2learn.main(Italk2learn.java:10)
my Java クラスの静的コードがうまく機能するため、dll またはパスに問題はありません。
static {
try {
System.loadLibrary("Italk2learn");
} catch (Exception e) {
System.err.println(e);
System.exit(1);
}
}
そして、ライブラリはうまくいくと思います。
JVM 32 ビットを使用してコンパイルし、C++ ヘッダー (javah) と C++ 用の MinGW32 を取得します。どちらの場合も、C++ と Java には eclipse を使用します。
これは私のコードです:
ジャワ:
public class Italk2learn {
public native void hello();
public static void main(String[] args) {
System.out.println("Hello World Java!");
try {
new Italk2learn().hello();
} catch (Exception e) {
System.err.println(e);
System.exit(1);
}
}
static {
try {
System.loadLibrary("Italk2learn");
} catch (Exception e) {
System.err.println(e);
System.exit(1);
}
}
}
C++ :
#include <jni.h>
#include <stdio.h>
#include "italk2learn.h"
JNIEXPORT void JNICALL Java_Italk2learn_hello(JNIEnv *, jobject) {
printf("Hello World C++!\n");
#ifdef __cplusplus
printf("__cplusplus is defined\n");
#else
printf("__cplusplus is NOT defined\n");
#endif
return;
}