描述
Ubuntu20.04安装opencv4的步骤
由于部分步骤是已经OK的,所以只是记录在这里,并将一些问题的解决方案记录在这里,以后会更新完整干净的步骤
步骤
-
下载opencv4.5.5 及 opencv_contrib4.5.5
-
我下载到的位置是Downloads,可以在Downloads目录下完成解压
cd Downloads
-
编译opencv,并将opencv_contrib设置为外部包同时进行编译(在命令中你会看到与opencv4.5.5同级目录下opencv_contrib4.5.5的路径)
mkdir release cd release cmake -D BUILD_TIFF=ON -D WITH_CUDA=OFF -D ENABLE_AVX=OFF -D WITH_OPENGL=OFF -D WITH_OPENCL=OFF -D WITH_IPP=OFF -D WITH_TBB=ON -D BUILD_TBB=ON -D WITH_EIGEN=OFF -D WITH_V4L=OFF -D WITH_VTK=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.4/modules ../../opencv-4.5.4 sudo make -j12 sudo make install
在make编译步骤时总会出现一些问题,我将解决办法写在最后
-
将OpenCV的库添加到路径
首先将OpenCV的库添加到路径,从而可以让系统找到
sudo gedit /etc/ld.so.conf.d/opencv.conf
打开后在文件(可能是空白的文件)中添加
/usr/local/lib
-
生效配置文件
使刚才的配置路径生效:
sudo ldconfig
-
配置bash
sudo gedit /etc/bash.bashrc
在打开的文件末尾添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
-
保存,执行如下命令使得配置生效:
source /etc/bash.bashrc
-
更新命令
sudo updatedb
问题一:编译时出错
在执行sudo make -j12
时,会出现错误。问题如下:
/usr/bin/ld: /usr/local/lib/libavcodec.a(vc1dsp_mmx.o): relocation R_X86_64_PC32 against symbol `ff_pw_9' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
modules/highgui/CMakeFiles/opencv_highgui.dir/build.make:638: recipe for target 'lib/libopencv_highgui.so.2.4.13' failed
make[2]: *** [lib/libopencv_highgui.so.2.4.13] Error 1
CMakeFiles/Makefile2:1934: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/all' failed
make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2
报错部分可以去参考这篇文章,我没真记录,不过这篇文章的报错和我基本是一模一样的https://blog.csdn.net/imv123/article/details/113122133
首先说明:按照很多方法去编译ffmpeg库,并添加什么参数:–enable-shared,并没有解决我的问题
最终我的解决方法也比较粗暴:
按照这篇文章的解释:pencv在编译的时候,用到了libswscale.a、libavcodec.a文件,这两个文件应该是可选的,如果电脑中有这两个文件,说明之前装过ffmpeg或者用ffmpeg相关库的软件,这是在装ffmpeg时安装的,报上述错误可能是因为ffmpeg的libswscale.a、libavcodec.a文件版本和opencv有冲突,opencv在cmake的时候会检测一些本机环境,如果有这两个文件,就会让这两个文件参与到编译当中。
http://t.zoukankan.com/GengMingYan-p-14800319.html
这里我们去关注报错
/usr/local/lib/libavcodec.a(vc1dsp_mmx.o):
我们执行命令去该路径下,确实发现了libswscale.a、libavcodec.a两个文件
cd /usr/local/lib
因此我们对这两个文件作了一下备份,然后删除了两个原文件
sudo cp libswscale.a libswscale.a.bak
sudo cp libavcodec.a libavcodec.a.bak
sudo rm libswscale.a
sudo rm libavcodec.a
接着我们跳回到主步骤,去重新编译opencv
sudo make -j12
在我们进行了如此的解决办法后,是可以编译成功的(对于我,前几次执行仍然报错,不知道为什么执行了好几次,才100%编译成功。这一过程中,我没有做其他操作,故且睁一只眼闭一支眼了)
不要忘了,最后将原文件还原回去,毕竟我们只是想忽略链接这两个库,并不是要真正删除他们
sudo cp libswscale.a.bak libswscale.a
sudo cp libavcodec.a.bak libavcodec.a
sudo rm libswscale.a.bak
sudo rm libavcodec.a.bak
总结
未完待续,因为我肯定迟早会再装很多次的