在Eclipse中导出时,我select“将所需的库包装到生成的jar”。 jar文件只能在我的机器上运行。 但是,当我在其他机器上testing它时,会出现以下exception:
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)
您必须在系统上安装OpenCV(如JavaCV要求中所述 )和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
for linux或*.dll
for windows)“做这个工作”,在这种情况下“使用OpenCV库” 第一个由JavaCV提供,并包含在你的jar
应用程序中。 第二个是依赖于系统(Os,architecture,…),并且必须放入java库路径中。
这是实际的错误:它找不到java.library.path
libjniopencv_core.so
。 jniopencv_core
库也由JavaCV提供,但是安装在系统的某个地方(例如/usr/lib/
),因此不包含在最终的jar
。
即使您找到了将其包含在最终应用程序中的方法,该库也需要使用系统上未安装的OpenCV库。 总结需求:
没有这一点的应用程序将无法正常工作。 因此,OpenCV和JavaCV必须安装到系统中。