我有一个设计在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环境中的最终用户。
答案 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输出中携带所有库文件并创建链接以防安装机器没有任何这些文件。