Java JNI未满足的链接错误

Java JNI未满足的链接错误,java,java-native-interface,unsatisfiedlinkerror,Java,Java Native Interface,Unsatisfiedlinkerror,.h文件 #include <jni.h> #include "NativePackage_HelloWorld.h" #include <stdio.h> JNIEXPORT void JNICALL Java_NativePackage_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return; } .c文件 #include <jn

.h文件

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

JNIEXPORT void JNICALL Java_NativePackage_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)   {
printf("Hello world!\n");
return;
}
.c文件

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

JNIEXPORT void JNICALL Java_NativePackage_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj){
printf("Hello world!\n");
return;
}
但是,尝试使用
java NativePackage/HelloWorld
运行会产生以下错误:

java  -Djava.library.path=NativePackage/ NativePackage/HelloWorld

Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1119)
at NativePackage.HelloWorld.<clinit>(HelloWorld.java:7)
java-Djava.library.path=NativePackage/NativePackage/HelloWorld
线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有hello
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
位于java.lang.Runtime.loadLibrary0(Runtime.java:870)
位于java.lang.System.loadLibrary(System.java:1119)
在NativePackage.HelloWorld。(HelloWorld.java:7)
我正在MAC OS X 10.10上运行,请尝试使用

System.load("/home/project/lib/libhello.so");
给出库的绝对路径


当我遇到同样的问题时,这对我很有帮助。

似乎可以为OS X libhello.dylib使用正确的命名方案和-shared选项


它应该是
java-Djava.library.path=NativePackage/NativePackage.HelloWorld
。你把“hello”共享库放在哪里了?在NativePackage/中,我也不确定共享库的命名应该是hello还是libhello.soTry,使用
-shared
标志编译,Mac OS X上库的命名方案是
libXXX.dylib
谢谢Samuel,你的答案是正确的。这很好,但是,OSX的命名不正确,linux也是如此。此外,我还有一个编译问题..dylib而不是.所以在Mac中
java  -Djava.library.path=NativePackage/ NativePackage/HelloWorld

Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1119)
at NativePackage.HelloWorld.<clinit>(HelloWorld.java:7)
System.load("/home/project/lib/libhello.so");
gcc -I /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/include/ -I /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/include/darwin/  -o libhello.dylib -shared HelloWorldImp.c