java本机编程中不满意的链接错误

时间:2015-07-01 07:06:00

标签: java c java-native-interface native

我正在尝试在java中构建我的第一个本机程序。.c和.h文件编译得很好但是在运行java代码时我得到了这个错误。 这是我的java和c源文件

Main.java

public class Main{
  public native void sayHello();
  static{
       System.loadLibrary("hello");
  }
  public static void main(String[] args) {
  Main main = new Main();
        main.sayHello();
  }
}

HELLO.C

#include <jni.h>
#include "stdio.h"
#include "Main.h"

JNIEXPORT void JNICALL Java_Main_sayHello(JNIEnv *env, jobject obj){
    printf("Hello World \n");
    return;

}

.C文件编译

C:.../gcc -I "C:\Program Files\Java\jdk1.7.0_79\include" -I "C:\Program Files\Java\jdk1.7.0_79\include\win32" -o hello.dll -shared Hello.c

运行Java文件

C:.../javac Main.java
C:.../java Main
Exception in thread "main" java.lang.UnsatisfiedLinkError: Main.sayHello()V
    at Main.sayHello(Native Method)
    at Main.main(Main.java:8)

1 个答案:

答案 0 :(得分:0)

新DLL的目录是Java应用程序的工作目录,系统PATH变量,还是&#34; java.library.path&#34; JVM变量?如果没有,则会抛出此异常,因为JVM无法找到DLL。

我不确定你得到的错误信息格式是什么意思。通常情况下,如果JVM找不到库,则错误类似于UnsatisfiedLinkError: no library_name in java.library.path,但您的错误则不同。