1
JNIEXPORT jint JNICALL JNI_Func(....) {
  ....
}

ネイティブ コードでマクロ(JNIEXPORT および JNICALL)を使用して Java プログラムを実行しようとすると、不満足なリンク エラーが発生します。しかし、マクロを削除すると、例外は発生しません。IDE Code::Blocksが JNI マクロをサポートしていないということですか? サポートしている場合、それらを有効にするにはどうすればよいですか?

注:定義されたマクロに関連するエラーや警告は表示されません。満足できないリンクエラーが発生するため、実行に失敗するだけです。

編集 :

スタックトレース :

Exception in thread "main" java.lang.UnsatisfiedLinkError:  keylogger.TestKeys.initializeJNIVars()V
    at keylogger.TestKeys.initializeJNIVars(Native Method)
    at keylogger.TestKeys.main(TestKeys.java:22)

ただし、この例外をスローする前に、ネイティブ コードから行を出力します。問題は実際にはマクロです。

4

1 に答える 1

1

ソースがコンパイルされ、DLL が作成された場合、Code::Blocks に問題はありません。Code::Blocks は gcc を使用し、gcc は問題なく JNI DLL を作成できます

Java クラスの実行中にこのエラーが発生した場合は、DLL をjava.library.path

編集

機能させるには、次の 2 つのオプションを追加する必要がありますProject->Build options->Linker Settings->Other Linker Options

-Xlinker --add-stdcall-alias

于 2012-06-08T09:23:27.667 に答える