JAVA クラスからネイティブ メソッドを呼び出そうとしています。この Java クラスは、コンパイルして [.h] バージョンを作成した後、[.c] ファイル内のすべての定義を詳細に説明します。次のステップでは、JAVA クラスでロードした [.dll] ファイルを作成しました。静的パラメーター内。
プログラムを実行しようとすると、次のエラーが表示されます。
スレッド「メイン」の例外 java.lang.UnsatisfiedLinkError: sample.HelloWorld.print()V
Java プログラムからネイティブ メソッドをマップする方法がわかりません。
コードによる詳細な説明:
[print()] メソッド宣言と呼ばれるネイティブ メソッドを持つ [HelloWorld.java] クラス ファイルがあります。
package sample;
public class HelloWorld{
public native void print();
static{
System.loadLibrary("HelloWorld");
}
}
さて、コンパイル時に、[.class] ファイル バージョンを取得します。次に、次のようにネイティブ メソッド [print()] の定義を持つ [.h] および [.c] ファイルを作成しました。
HellWorld.c
#include<stdio.h>
#include<jni.h>
#include<windows.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv * env, jobject jobj){
printf("Hello there!!!!!!");
return;
}
この [.c] ファイルをビルドすると、必要な [.dll] ファイルが生成されます。すべてがエラーなしで正常に動作し、JAVA ファイルを呼び出すとメッセージが print() メソッドから出力されます。
主な問題は、別のクラスであるInvoker.javaクラスファイルからHelloWorld.javaクラス ファイルでこのprint()メソッドを呼び出そうとしたときに発生します。次に、これにより例外が生成されます。
スレッド「メイン」の例外 java.lang.UnsatisfiedLinkError: sample.HelloWorld.print()V
なぜこれが起こるのかわかりません。助言がありますか?