我在指定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/");
(带或不带前导点)也会抛出相同的错误。
非常感谢任何有关此问题的帮助。
答案 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