而在日食出口,我选择“包所需的库到生成的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)
简答
您必须安装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需要两个组成部分:
- 一个Java库(通常是用扩展
*.jar
)包含Java方法调用本机库 - 本机库(通常是用扩展
*.so
或用于Linux *.dll
适用于Windows)说:“做工作”,在这种情况下“使用OpenCV库”
第一个是由JavaCV提供,纳入您的jar
应用。 第二个是依赖于系统(OS,建筑,...),并且必须是到Java库路径。
这是实际的错误:它无法找到libjniopencv_core.so
到java.library.path
。 所述jniopencv_core
库由JavaCV提供太多,但在某处安装在系统(上/usr/lib/
例如),因此不包括在最终jar
。
即使你想办法把它列入到最终的应用程序,该库将需要使用未在系统上安装过OpenCV的库。 总结需求:
- JavaCV Java库 ,将调用(用JNI):
- JavaCV本地库 ,将使用:
- OpenCV的库 ,这将真正做的工作。
如果没有这一点上,应用程序将无法正常工作之一。 因此OpenCV的和JavaCV必须安装到系统中。