我是JNI的新手,所以我之前尝试过对JNI教程的介绍,只是调用native来打印Hello World!一切顺利,直到我想运行java文件,我不断收到错误:线程“main”中的异常:java.lang.UnsatisfiedLinkError:在java.library.path中找不到hello库。我搜索了这个错误并查看了很多人的建议,但遗憾的是没有一个对我有用!我尝试过以下方法:
其他人在完成上述两项中的一项后解决了问题,但不是我!
这是Java代码:
public class HelloWorld {
static {
System.loadLibrary("hello");
}
private native void printHelloWorld();
public static void main(String[] args) {
new HelloWorld().printHelloWorld();
}
}
原生代码如下:
void JNICALL Java_printHelloWorld(JNIEnv *env, jobject obj) {
printf("HelloWorld!");
}
编辑:我甚至尝试将库复制到java.library.path的实际目录中,但它仍然给我同样的错误!
答案 0 :(得分:3)
你的图书馆叫什么?如果您的路径正确,您的库名称可能是错误的。在Windows上,需要将文件称为hello.dll
,OS X(Java <1.7)libhello.jnilib
,OS X(Java> = 1.7)libhello.dylib
,其他所有内容都将是{ {1}}。请注意,Windows dll文件是唯一没有&#34; lib&#34;的文件名。前缀和那个&#34; lib&#34;调用libhello.so
时不使用前缀。如果您在加载lib时仍遇到问题,请尝试System.loadLibrary("hello")
尝试直接加载库。
答案 1 :(得分:0)
@亚历克斯·巴克 版本
System.load("/path/to/my/libhello.so")
不解决依赖关系。如果依赖于其他用户定义的库,则需要先加载它们。