在java.library.path中找不到库

时间:2014-04-05 22:40:37

标签: java java-native-interface

我是JNI的新手,所以我之前尝试过对JNI教程的介绍,只是调用native来打印Hello World!一切顺利,直到我想运行java文件,我不断收到错误:线程“main”中的异常:java.lang.UnsatisfiedLinkError:在java.library.path中找不到hello库。我搜索了这个错误并查看了很多人的建议,但遗憾的是没有一个对我有用!我尝试过以下方法:

  • 使用命令运行:java -Djava.library.path =“库的路径”HelloWorld
  • 将LD_LIBRARY_PATH设置为我的.so路径

其他人在完成上述两项中的一项后解决了问题,但不是我!

这是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的实际目录中,但它仍然给我同样的错误!

2 个答案:

答案 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")

不解决依赖关系。如果依赖于其他用户定义的库,则需要先加载它们。

相关问题