在eclipse中导出时,我选择“将所需的库打包到生成的jar中”。 jar文件只能在我的机器上运行。但是,当我在其他机器上测试时,它会给出这个例外:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593)
at com.googlecode.javacpp.Loader.load(Loader.java:489)
at com.googlecode.javacpp.Loader.load(Loader.java:431)
at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:136)
at mains.<clinit>(mains.java:25)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:266)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
答案 0 :(得分:4)
您必须在系统上安装OpenCV(如JavaCV requirements中所述)和JavaCV才能使用JavaCV。由于您可能已在计算机上安装它们以进行开发,因此应用程序可以正常工作,但另一台机器可能没有安装它们,因此jar
无法正常工作。
问题不在于JavaCV库,它似乎正确地包含在jar
中,如下所示:
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593)
at com.googlecode.javacpp.Loader.load(Loader.java:489)
at com.googlecode.javacpp.Loader.load(Loader.java:431)
at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:136)
事实上,JavaCV是建立在OpenCV之上的。 OpenCV是一个C ++库,从Java中使用它的唯一方法是使用JNI调用。
JNI需要两个组件:
*.jar
)
*.so
用于linux或*.dll
用于Windows)“执行工作”,在本例中为“使用OpenCV库”第一个由JavaCV提供,并包含在您的jar
应用程序中。第二个是系统相关的(Os,体系结构,......),必须进入java库路径。
这是实际错误:它无法在libjniopencv_core.so
中找到java.library.path
。 jniopencv_core
库也由JavaCV提供,但安装在系统的某个位置(例如/usr/lib/
),因此不包含在最终的jar
中。
即使您找到了将其包含在最终应用程序中的方法,该库也需要使用未安装在系统上的OpenCV库。总结需求:
如果没有这一点,应用程序将无法正常工作。因此必须在系统中安装OpenCV和JavaCV。