我最近从 14.04 升级到了 16.04 LTS。几个月来我一直在这台机器上开发一个 Java 应用程序,它使用 opencv 进行图像处理。我从源代码编译了 opencv。我在 eclipse 中进行开发,并链接到我在 14.04 下编译的静态 opencv 库。正如我所说,这已经工作了几个月。现在,在升级到 16.04 后,我第一次尝试使用相同的代码运行它时,出现了错误:
java.lang.UnsatisfiedLinkError /home/pwarner/Documents/OpenCV/opencv-3.0.0/build/lib/libopencv_java300.so: libIlmImf.so.6: cannot open shared object file: No such file or directory
以下是代码:
public class NativeOpenCVLoader {
static {
System.load("/home/pwarner/Documents/OpenCV/opencv-3.0.0/build/lib/libopencv_java300.so");
}
}
当然,路径是正确的,并且文件就在那里。
ls /home/pwarner/Documents/OpenCV/opencv-3.0.0/build/lib/libopencv_java300.so
/home/pwarner/Documents/OpenCV/opencv-3.0.0/build/lib/libopencv_java300.so
是否有一个 c++ 库因升级而发生变化,因此无法再读取文件?我需要重建 opencv 吗?
定位 libIlmImf.so.6 没有结果。
pwarner@pwarner-Studio-XPS-7100:~$ locate libIlmImf.so.6
pwarner@pwarner-Studio-XPS-7100:~$
但是,我似乎有 libIlmImf.so
pwarner@pwarner-Studio-XPS-7100:/usr/lib$ locate libIlmImf.so
/usr/lib/x86_64-linux-gnu/libIlmImf.so
这是指向以下地址的软链接:
pwarner@pwarner-Studio-XPS-7100:/usr/lib/x86_64-linux-gnu$ ll libIlmImf.so*
lrwxrwxrwx 1 root root 23 Apr 17 20:42 libIlmImf.so -> libIlmImf-2_2.so.22.0.0
我建立了到 libIlmImf.so.6 的软链接,按照 Zanna(和 SahibPrime)下面的建议。
pwarner@pwarner-Studio-XPS-7100:~$ locate libIlmImf.so.6
/usr/lib/x86_64-linux-gnu/libIlmImf.so.6
但仍然没有运气——仍然收到相同的 UnsatisfiedLinkError 错误。
答案1
升级到 16.04 后,我花了 3 个小时从源代码重建 opencv。现在我可以再次为我的项目运行 tomcat 服务器了。我遵循了以下出色的说明:
https://www.youtube.com/watch?v=hd8FFw0B0uA
和这里:
http://embedonix.com/articles/image-processing/installing-opencv-3-1-0-on-ubuntu/
我在制作过程中遇到了两个问题,我不得不添加/调整上面 YouTube 链接中的 đàm văn tài 中的说明。制作过程找不到 libvpx.so.1 并失败了。我在系统上找到了 libvpx.so.3,并抓住机会从中创建了到 libvpx.so.1 的软链接。安装似乎很顺利。
第二个问题与 libtiff 有关,
http://answers.opencv.org/question/35642/libtiff_40-link-errors/
我找到了答案:
add -D BUILD_TIFF=ON
到 cmake 列表。这解决了该问题。
在安装新的 3.1.0 版本之前,我小心地卸载了旧的 opencv 3.0.0 安装。我可以指出,根据我的经验,如果在 make 过程中遇到问题,最好删除 build 目录的所有内容,然后在解决问题后再次运行 cmake,然后 make。
以下是 đàm văn tài 在其 YouTube 页面上提供的清晰、详细的步骤(如果您使用它们,您可以转到他的页面并单击“喜欢”——再次点击链接:https://www.youtube.com/watch?v=hd8FFw0B0uA)。
*Update Repositories
sudo apt update -y && sudo apt upgrade
*Build tools
sudo apt install build-essential cmake
*Multimedia"
sudo apt install libjpeg-dev libpng-dev libtiff5-dev libjasper-dev libgdal-dev zlib1g-dev libwebp-dev libv4l-dev libxine2-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 libx264-dev yasm libxvidcore-dev libvorbis-dev libtheora-dev libswscale-dev libavformat-dev libavcodec-dev libdc1394-22-dev libgstreamer-plugins-base0.10-dev libgstreamer0.10-dev libfaac-dev ffmpeg
*Parallel frameworks
sudo apt install libtbb2 libtbb2-dbg libtbb-dev libpomp2-dev
*Python Support
sudo apt install python-dev python-tk python-numpy python3-dev python3-tk python3-numpy
*Oracle JDK
sudo add-apt-repository ppa:webupd8team/java
sudo apt update
sudo apt install oracle-java8-installer
sudo apt install ant
*Extras
sudo apt install libeigen3-dev doxygen libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev qt5-default libatlas-base-dev gfortran
cd opencv-3.1.0
mkdir build
cd build/
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-master/modules -D BUILD_EXAMPLES=ON -D WITH_OPENGL=ON ..
sudo apt-get install ant default-jdk
make -j2
sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
cd ..
cd samples/
cmake .
sudo make -j4