使用openCV 3.4.2-2的时候 提示,UnsatisfiedLinkError: libopencv_java342.dll
后面查询说是没有加载对应的动态库,网上找了下说是要使用如下代码手动加载
static {
// load native 方法
nu.pattern.OpenCV.loadShared();
}
可以看里面的方法, 他会加载对应的libopencv_java342
文件将此文件提取到一个临时位置(当 JVM 关闭时,该位置将被删除),然后加载对应位置的此文件。
private static Path extractNativeBinary(OS os, Arch arch) {
String location;
label34:
switch (os) {
case LINUX:
switch (arch) {
case X86_32:
location = "/nu/pattern/opencv/linux/x86_32/libopencv_java342.so";
break label34;
case X86_64:
location = "/nu/pattern/opencv/linux/x86_64/libopencv_java342.so";
break label34;
case ARMv8:
location = "/nu/pattern/opencv/linux/ARMv8/libopencv_java342.so";
break label34;
default:
throw new UnsupportedPlatformException(os, arch, (SyntheticClass_1)null);
}
case OSX:
switch (arch) {
case X86_64:
location = "/nu/pattern/opencv/osx/x86_64/libopencv_java342.dylib";
break label34;
default:
throw new UnsupportedPlatformException(os, arch, (SyntheticClass_1)null);
}
case WINDOWS:
switch (arch) {
case X86_32:
location = "/nu/pattern/opencv/windows/x86_32/opencv_java342.dll";
break label34;
case X86_64:
location = "/nu/pattern/opencv/windows/x86_64/opencv_java342.dll";
break label34;
default:
throw new UnsupportedPlatformException(os, arch, (SyntheticClass_1)null);
}
default:
throw new UnsupportedPlatformException(os, arch, (SyntheticClass_1)null);
}
加上之后后面还是报错,看起来是此这个复制没有成功,没有找到复制失败的原因,但是我们可以去对应目录/nu/pattern/opencv/
下将对应OS的文件复制到系统路径下,例如linux的 复制到/usr/lib64/
即可
cp ~/.m2/repository/org/openpnp/opencv/3.4.2-2/nu/pattern/opencv/linux/x86_64libopencv_java430.so /usr/lib64/