0

我正在尝试从 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

我不明白为什么当我这样做时会发生这种情况?有什么建议么?

4

1 回答 1

0

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

有关更多信息,请参阅此链接

于 2014-09-22T03:15:09.810 回答