我正试图在Mac上创建我的应用程序的可执行jar,它使用OpenCV中的函数。然而,当我试图在eclipse中创建jar时,我得到了以下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java248 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at imageRegistration.ImageGUI.main(ImageGUI.java:643)
我认为错误是因为有一个.dlib文件链接到OpenCV jar,并且没有与之打包。
我发现了这个问题,这似乎和我遇到的问题一样,但解决方案对我不起作用。这就是我所做的:
public static void libLoad(){
try{
InputStream in = ImageGUI.class.getResourceAsStream("/lib/opencv-2.4.8 MAC/build/lib/libopencv_java248.dylib");
File fileOut = File.createTempFile("lib", ".dylib");
OutputStream out = FileUtils.openOutputStream(fileOut);
IOUtils.copy(in, out);
in.close();
out.close();
System.load(fileOut.toString());
} catch(Exception e) {
System.out.println("Failed to load opencv native library n" + e);
}
}
当我运行这个时,我得到的错误是:
Failed to load opencv native library
java.lang.NullPointerException
编辑:这是完整的堆栈跟踪:
java.lang.NullPointerException
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744)
at imageRegistration.ImageGUI.libLoad(ImageGUI.java:624)
at imageRegistration.ImageGUI.main(ImageGUI.java:643)
您需要打印完整的堆栈跟踪,NPE的来源尚不清楚。很可能ImageGUI.class.getResourceAsStream返回null。如果这是真的,那是因为路径错误或lib不在jar 中
您可以尝试将本机OpenCV DLL文件放在JRE的bin目录下。至少它对我有效