Ubuntu 14.04.2下无法匹配版本为OpenCV添加额外模块求助
我太懂这种在旧版本系统上踩坑的感觉了——之前在树莓派16.04上顺风顺水,换到14.04.2就处处碰壁,尤其是OpenCV这种依赖复杂的库。结合我折腾老Ubuntu版本的经验,给你几个针对性的解决思路:
一、先把版本匹配的细节抠到位
你已经知道opencv和opencv_contrib版本必须完全一致,但还要注意:Ubuntu14.04.2自带的gcc是4.8.4,这个版本对OpenCV3.4.x的部分特性支持有限,建议优先尝试OpenCV3.2.0或3.1.0,这两个版本对老gcc兼容性更好。如果一定要用3.4.x,后面编译时要加特殊参数。
二、先把依赖库补全(老系统的依赖包名和新系统不一样)
Ubuntu14.04已经停止官方更新了,首先得把源换成旧版本镜像,不然连依赖都装不上:
sudo sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list sudo apt update && sudo apt upgrade -y
然后安装所有必须的依赖,包括contrib模块需要的:
# 基础编译工具和核心依赖 sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev # 图像格式依赖 sudo apt install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # contrib模块额外需要的依赖 sudo apt install libopenexr-dev libwebp-dev libgdal-dev libv4l-dev libxvidcore-dev libx264-dev # Python相关(如果需要Python绑定) sudo apt install python-dev python-numpy
三、编译时加这些参数避坑
进入OpenCV的build目录后,cmake命令一定要加上这些针对Ubuntu14.04的参数,不然大概率编译失败:
# 假设你的opencv源码在~/opencv/opencv-3.2.0,contrib在~/opencv/opencv_contrib-3.2.0 cd ~/opencv/opencv-3.2.0/build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-3.2.0/modules \ -D BUILD_EXAMPLES=ON \ -D WITH_GTK=ON \ # 老系统用GTK2而不是GTK3 -D WITH_V4L=ON \ -D WITH_OPENGL=OFF \ # 14.04的OpenGL环境容易出兼容问题,先关掉 -D ENABLE_PRECOMPILED_HEADERS=OFF \ # 老gcc不支持这个特性,必须关 -D CMAKE_C_COMPILER=/usr/bin/gcc-4.8 \ -D CMAKE_CXX_COMPILER=/usr/bin/g++-4.8 \ ..
四、编译和安装的小技巧
- 老机器内存有限,编译时不要开太多线程,比如用
make -j2而不是-j4,避免内存溢出导致编译中断:
make -j2 sudo make install sudo ldconfig # 更新系统库缓存
五、常见错误的快速修复
- libjasper相关编译错误:Ubuntu14.04的官方libjasper-dev有bug,手动编译安装最新版:
git clone https://github.com/jasper-software/jasper.git cd jasper && mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. make -j2 && sudo make install && sudo ldconfig
然后重新cmake和编译OpenCV。
contrib模块里的xfeatures2d编译失败:如果是专利算法相关的错误,可以临时关闭这个模块(如果不需要的话),在cmake里加
-D BUILD_opencv_xfeatures2d=OFF。Python绑定找不到:确保cmake输出里显示找到了Python2.7(14.04默认是Python2),如果没找到,检查
python-dev和python-numpy是否安装正确。
按这个流程走,应该能解决你遇到的问题——毕竟我之前在14.04上折腾OpenCV3.2的时候,就是靠这些步骤搞定的。
内容的提问来源于stack exchange,提问作者bendikiv

