线程“main”中的异常java.lang.UnsatisfiedLinkError:sample.HelloWorld.print()V

时间:2013-03-09 14:02:19

标签: java c

我试图从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

当我这样做时,我不明白为什么会这样?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

.c文件中的JNICALL函数名称应与HelloWorld.h文件中的名称完全相同

请参阅此link了解详情