【问题标题】:library not found in java.library.path在 java.library.path 中找不到库
【发布时间】:2014-05-18 05:48:01
【问题描述】:

我是 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();
    }
} 

native 的代码如下:

void JNICALL Java_printHelloWorld(JNIEnv *env, jobject obj) {
    printf("HelloWorld!");
}

编辑:我什至尝试将库复制到 java.library.path 的实际目录,但它仍然给我同样的错误!

【问题讨论】:

  • 请展示您的完整代码,包括原生部分和 Java 部分。
  • java.library.path 和 LD_LIBRARY_PATH 必须指向包含 .so 文件的目录,而不是文件本身。
  • 对我来说,当路径包含 64 位库时,32 位 jvm 会给出相同的消息...

标签: java java-native-interface


【解决方案1】:

你的图书馆叫什么?如果您的路径正确,则您的库名称可能是错误的。在 Windows 上,该文件需要命名为 hello.dll、OS X (Java libhello.jnilib、OS X (Java >= 1.7) libhello.dylib,其他几乎所有内容都将命名为 libhello.so。请注意,Windows dll 文件是唯一没有“lib”前缀的文件名,并且在调用System.loadLibrary("hello") 时不使用“lib”前缀。如果您在加载库时仍然遇到问题,请尝试System.load("/path/to/my/libhello.so") 尝试直接加载库。

【讨论】:

  • 提示是否有人使用 Mac OS X 10.9 Mavericks 和 IntelliJ:使用自制软件安装 opencv $ brew install homebrew/science/opencv --with-java 将 opencv 添加到(全局)库:/usr/local/Cellar/opencv/2.4.9/share/OpenCV/java 编辑运行配置(vm 选项):-Djava.library.path=/usr/local/Cellar/opencv/2.4.9/share/OpenCV/java仍然收到这样的错误? Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java249 in java.library.path查看Java版本:$ java -version java version "1.6.0_65"解决方案:升级Java SDK
【解决方案2】:

@亚历克斯·巴克 版本

System.load("/path/to/my/libhello.so")

不解决依赖关系。如果对其他自定义库有依赖,需要先加载。

【讨论】:

  • 使用ldd /path/to/my/libhello.so查看依赖关系
  • + 在 Windows 上,优秀的“Depency Walker”可以胜任
猜你喜欢
  • 2011-07-31
  • 2011-11-03
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2013-01-28
  • 2013-09-19
  • 2020-01-02
相关资源
最近更新 更多