【问题标题】:System.loadLibrary() error -- unable to specify a relative or absolute pathSystem.loadLibrary() 错误——无法指定相对或绝对路径
【发布时间】:2018-03-07 18:23:34
【问题描述】:

我在指定 x64 OpenCV DLL 的路径时遇到问题。

我正在使用

static{
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}

加载 OpenCV x64 DLL,它在 NetBeans 中运行良好(使用 -Djava.library.path=".\opencv\x64",但不适用于 IDE 外部的 .jar。

运行构建的 .jar(带或不带 -Djava.library.path=".\opencv\x64")会抛出:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no 
    opencv_java330 in java.library.path

这里有无数关于这个问题的问题和解决方案。

但是,它们都需要包含 DLL 的文件夹的相对路径 -- 我无法指定 x64 OpenCV DLL 所在文件夹的绝对路径或相对路径。

System.loadLibrary("%UserProfile%/Documents/NetBeansProjects/ProjectName/opencv/x64/");

抛出

java.lang.UnsatisfiedLinkError: no %UserProfile%/Documents/NetBeansProjects/ProjectName/opencv/x64/ in java.library.path 错误。

文件夹的直接路径会引发同样的错误。

只是System.loadLibrary("/opencv/x64/");(带或不带前导点)也会引发相同的错误。

对于这个问题的任何帮助将不胜感激。

【问题讨论】:

    标签: java windows opencv netbeans dll


    【解决方案1】:

    可能您的参数顺序错误。在下面找到一个工作示例。

    假设如下结构。

    bin\
    dist\
    opencv\x64\opencv_java320.dll
    src\foo\Test.java
    

    Test.java

    package foo;
    class Test {
        public static void main(String[] args) {
            // note: the parameter is the library name, no extension, no path
            System.loadLibrary("opencv_java320");
            System.out.println("library loaded");
        }
    }
    

    文件系统上的类路径

    • 编译

      javac -d bin/ src/foo/Test.java
      
    • 运行

      java -cp bin -Djava.library.path=opencv/x64 foo.Test
      
    • 输出

      library loaded
      

    JAR 文件中的类

    • 创建可执行的 JAR 文件

      echo Main-Class: foo.Test > manifest.mf
      jar cfm dist/application.jar manifest.mf -C bin/ .
      
    • 使用相对路径执行 JAR 文件

      java -Djava.library.path=opencv/x64 -jar dist/application.jar
      
    • 执行当前目录下的JAR文件

      cd dist
      java -Djava.library.path=../opencv/x64 -jar application.jar
      
    • 两个 JAR 执行的输出

      library loaded
      

    【讨论】:

      猜你喜欢
      • 2013-04-17
      • 1970-01-01
      • 2016-03-16
      • 2015-02-09
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 2016-09-29
      • 2014-03-14
      相关资源
      最近更新 更多