导出可运行的JAR并包含.so本机库

时间:2017-12-04 17:23:03

标签: java eclipse opencv jar export

我正在编写一个java应用程序(在Linux OS上),它访问网络摄像头并在JPanel上显示视频。我使用openCV库来获取它(也因为我想添加一些图像处理代码)。 我跟着this guide编译了Java的openCV库

并且我能使其工作的唯一方法是创建一个链接到我拥有相应jar文件的文件夹的用户库。 (我试图直接导入jar文件,但我有一些运行时异常,所以我放弃了。)

This是我的情况。 现在我有一个工作的应用程序(如果我在Eclipse中执行它),我想将它导出为一个jar(或者在Eclipse之外的可执行文件)。我尝试通过选择these选项来实现这一目标。

问题是,现在我想测试jar是否通过从终端执行以下命令来工作(其中Untitled.jar是导出代码的名称):

java -jar Untitled.jar 

但是我收到了这个错误(我把主要问题加粗了):

  

线程中的异常" main" java.lang.reflect.InvocationTargetException     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)   引起:java.lang.UnsatisfiedLinkError:没有opencv_java331   java.library.path at   java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)at   java.lang.Runtime.loadLibrary0(Runtime.java:870)at   java.lang.System.loadLibrary(System.java:1122)at   myRefreshTest.Main.main(Main.java:8)

opencv_java331是构建openCV for Java(opencv_java331.so)后生成的.so库的名称

我尝试了几种导出程序的方法,也选择了Eclipse导出弹出窗口中的第3个选项("将所需的库复制到生成的JAR旁边的子文件夹中),然后执行

java -cp Untitled_lib/opencv-331.jar  -jar Untitled.jar 

但终端返回此错误:

  

线程中的异常" main" java.lang.UnsatisfiedLinkError:没有   java.library.path中的opencv_java331 at   java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)at   java.lang.Runtime.loadLibrary0(Runtime.java:870)at   java.lang.System.loadLibrary(System.java:1122)at   myRefreshTest.Main.main(Main.java:8)

所以,问题很清楚,它无法找到openCV .so库。 我试图使用选项-Djava.library.path但它不起作用(或者至少我没有正确使用它) 我不是Java专家,我无法理解如何解决这个问题。有谁知道如何解决这个问题?

0 个答案:

没有答案