我正在尝试在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)
答案 0 :(得分:0)
新DLL的目录是Java应用程序的工作目录,系统PATH变量,还是&#34; java.library.path&#34; JVM变量?如果没有,则会抛出此异常,因为JVM无法找到DLL。
我不确定你得到的错误信息格式是什么意思。通常情况下,如果JVM找不到库,则错误类似于UnsatisfiedLinkError: no library_name in java.library.path
,但您的错误则不同。