我正在尝试从 JAVA 类调用本机方法。这个 JAVA 类在我编译它并为其创建 [.h] 版本并详细说明 [.c] 文件中的所有定义之后。下一步是创建我使用 JAVA 类加载的 [.dll] 文件在静态参数范围内。
现在,当我尝试运行我的程序时,它给了我以下错误:
线程“主”java.lang.UnsatisfiedLinkError 中的异常:sample.HelloWorld.print()V
我不明白如何从我的 JAVA 程序映射本机方法?
更多代码解释:
我有一个 [HelloWorld.java] 类文件,它具有称为 [print()] 方法声明的本机方法:
package sample;
public class HelloWorld{
public native void print();
static{
System.loadLibrary("HelloWorld");
}
}
现在,在编译时,我得到了它的 [.class] 文件版本。接下来我创建了 [.h] 和 [.c] 文件,其中包含本机方法 [print()] 的定义,如下所示:
地狱世界.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
我不明白为什么当我这样做时会发生这种情况?有什么建议么?