我试图从JAVA类调用本机方法。这个JAVA类在我编译它之后为它创建了[.h]版本并详细说明了[.c]文件中的所有定义。接下来的步骤是创建我加载了JAVA类的[.dll]文件在静态参数范围内。
现在,当我尝试运行程序时,它会出现以下错误:
线程中的异常" main" 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()]的定义,如下所示:
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()方法时,会出现主要问题>类文件。然后这会产生异常:
线程中的异常&#34; main&#34; java.lang.UnsatisfiedLinkError:sample.HelloWorld.print()V
当我这样做时,我不明白为什么会这样?有什么建议吗?