Java程序Opencv不满意链接错误

时间:2016-01-16 16:13:24

标签: java c++ linux eclipse opencv

我有一个设计在Linux环境中运行的java应用程序,使用Opencv和 Eclipse - Ubuntu 14.04 开发。它在Eclipse中运行良好,并在导出时生成.jar。程序.jar在安装opencv的系统上运行良好。

java -Dpath.java.library="/home/me/opencv/build/lib" -jar program.jar

安装了opencv的库包含了所有文件和指向这些文件的链接,当我在libopencv_java310.so上执行ldd时,它会显示所有相关的文件/链接。

但是在没有安装opencv的机器上:

我已经能够运行libs并使用ln命令创建所有链接但是我仍在使用

  

java.lang.unsatifiedlinkerror:/my/lib/libopencv_java310.so:   libopencv_core.so.3.1:无法打开共享对象文件:没有这样的文件或   目录

我在libopencv_java310.so上做了一个ldd,结果是libopencv_core.so.3.1 =>找不到 - opencv库中没有找到的几个。

链接 libopencv_core.so.3.1 与所有其他正确的链接文件及其相应的so文件一起位于目录中。我在这里错过了什么?我知道我需要libopencv_java310.so找到链接,但我不知道如何。

本练习的最后一点是将自包含的可执行文件,.jar或lib文件和.jar的组合分发给linux环境中的最终用户。

1 个答案:

答案 0 :(得分:0)

答案是Opencv库需要存储在安装机器上与生产机器完全相同的目录中。在我的情况下,我可能在生产机器上的初始安装期间没有使用正确的目录 - 在我的工作区中存储opencv库。

首先,我在安装PC /home/me/OpenCV/opencv-3.1.0/build/lib上创建了相同的目录,并将生产机器中的所有opencv库复制到该目录中。

其次,我使用ldd /home/me/opencv_java310.so查找缺少链接的库。

第三,我使用 ln -s library.file library.link name来创建ldd输出中命名的每个链接。

第四,我必须复制并创建存储在系统区域/usr/lib and /usr/lib/x86_64-linux-gnu中的某些库的链接,这些库在opencv_java310.so的ldd输出中也突出显示为缺失

最后,我能够执行程序java - Djava.library.path="/home/me/OpenCv/opencv-3.1.0/build/lib" -jar program.jar

我的下一步是使用shell或其他实用程序和zip文件自动执行此过程以包含所有数据。我怀疑我应该从ldd opencv_java310.so输出中携带所有库文件并创建链接以防安装机器没有任何这些文件。