System.loadLibrary()错误 - 无法指定相对路径或绝对路径

时间:2017-09-26 13:31:56

标签: java windows opencv netbeans dll

我在指定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/");(带或不带前导点)也会抛出相同的错误。

非常感谢任何有关此问题的帮助。

1 个答案:

答案 0 :(得分:0)

可能你的参数顺序错误了。在下面找到一个有效的例子。

假设有以下结构。

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