0

依存関係ウォーカーは初めてで、JNI 経由で Java から呼び出そうとする C 関数が dll に含まれているかどうかを判断しようとしています。Dependency Walker で C 関数を含む dll を選択すると、インポート関数とエクスポート関数が表示されます。インポート リストには setLogLevel 関数がありますが、エントリ ポイントはバインドされておらず (このリストのすべての関数と同様)、c の付いた緑色のボックスが表示されます。エクスポート リストには setLogLevel 関数があり、エントリ ポイントとして 0x00003C25 があります。JAVA/JNI から setLogLevel を呼び出そうとすると、以下のようになります。インポート/エクスポートが正しいかどうかわからないのですが、誰か確認できますか?

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.test.jni.SampleJNI.setLogLevel(I)V
            at com.test.jni.SampleJNI.setLogLevel(Native Method)
            at com.test.jni.Sample.setLogLevel(Unknown Source)
            at com.test.jni.Example.setLogLevel(Unknown Source)
            at com.test.jni.Example.main(Unknown Source) 
4

2 に答える 2

0

Makefile の CFLAGS (コンパイル) インクルードから、jdk の jni.h および jni_md.h ヘッダー ファイルを含む Java ディレクトリを省略しました。それらを Makefile に追加すると、JNI メソッド呼び出しを介して Java から C に通信できるようになりました。

于 2012-01-05T05:46:03.160 に答える
0

C 関数の名前が間違っています。名前には接頭辞を付けJava、パッケージ名とクラス名を含める必要があります。あなたの場合、それはJava_com_test_jni_SampleJNI_setLogLevel.

于 2012-01-04T23:45:26.643 に答える