Ubuntu18:使用CMake-gui编译OpenCV3源码的详细过程
1、进入OpenCV的安装目录,找到build文件夹,在终端打开:sudo make uninstallcd ..sudo rm -r build然后卸载/usr中的有关OpenCV的内容:cd /usr/find . -name "*opencv*" | xargs sudo rm -rf
目录
由于之前安装的OpenCV4与我的代码有多处不兼容,所以要重新装一个OpenCV3,顺便记录一下过程吧
OpenCV版本:opencv-3.4.10 opencv-contrib-3.4.10
使用cmake-gui进行编译安装
一、卸载原来的opencv
卸载过程很简单,在原build文件夹下打开终端,依次输入以下指令进行卸载就可以了
sudo make uninstall
cd ..
sudo rm -r build
二、准备工作
源码下载链接:
opencv-3.4.10:https://codeload.github.com/opencv/opencv/zip/3.4.10
opencv-contrib-3.4.10:https://codeload.github.com/opencv/opencv_contrib/zip/3.4.10
在Home目录下新建文件夹opencv,在opencv文件夹,将opencv-3.4.10.zip解压到该opencv文件夹下,更名为opencv,并新建一个名为build的空文件家,用以放置编译产生的文件。然后将opencv-contrib-3.4.10.zip解压到opencv-3.4.10.zip解压后的opencv文件夹下,并更名为opencv-contrib。这部分关于解压的源码怎么放可以按自己的习惯自定义,只要记得路径就行,以上只是我的方法,仅供参考。我的结构如下:
三、编译过程
cd 到上文新建的空build文件夹下,在终端打开,准备使用CMake编译,此处使用cmake-gui编译,好处是编译过程更加方便直观。前提是要安装cmake及cmake-gui。在终端中输入以下命令:
cmake-gui ..
一定记得后面还有俩点,因为cmake要用的CMakeLists文件相对build文件夹来说实在上级目录。回车后就会打开cmake-gui界面如下:
源码位置以及生成二进制文件的位置已经自动生成了,我们点击下方Configure按钮,选择Unix Makefiles,其他的选择默认就好,然后点击Finish,稍等片刻。 之后会出现以下界面:
在这里要找到三个地方进行修改;
1、勾选上BUILD_opencv_world
2、在CMAKE_BUILD_TYPE后填上:RELEASE
3、在OPENCV_EXTRA_MODULES_PATH后填上opencv-contrib/modules的路径,比如我的是:/home/wsx/opencv/opencv/opencv_contrib/modules
完成之后再次点击Configure按钮,稍等片刻,之后在点击Generate按钮。
——————————————————BUG—没问题就略过这部分——————————————————
在这里我遇到了一个有关Anaconda3/lib里的某些文件与系统文件重名而冲突的问题,报错片段为:
Cannot generate a safe runtime search path for target opencv_world because files in some directories may conflict with libraries in implicit......
解决方法:
该问题是因为我之前安装过Anaconda3,并将其路径也放到了.bashrc文件中了,而这里在cmake进行库链接时,出现了Anaconda3/lib里的某些文件与系统/usr/lib/x86_64-linux-gnu下的文件重名而导致冲突的发生。因此我们志勇暂时将.bashrc里的有关Anaconda的路径注释掉,如下(记得改完之后再source更新下环境变量):
接下来。我们退出cmake-gui,把build文件夹删除,关掉Terminal,然后从头再操作一下。记得在最后安装完之后再把注释去掉。
———————————————————————END———————————————————————
正常的情况下点击Generate后会出现以下界面:
之后就可以关掉cmake-gui了,然后在build文件夹里重新开一个Terminal,首先输入nproc查询最大线程数:
wsx@wsx:~$ nproc
12
我这里是12,所以为了快一点编译,就输入以下指令:
make -j12
之后就是漫长的编译过程,这里一般没啥问题,就是比较耗时,成功后就是下面的界面。
然后再在终端输入以下指令进行安装。
sudo make install
就是下面这样:
至此,编译安装部分就完成了,下面就是环境的配置了。
首先是动态库(共享库)的配置。
输入指令打开(创建)opencv.conf文件,在文件中加入 /usr/local/lib ,然后保存退出。
sudo gedit /etc/ld.so.conf.d/opencv.conf
接下来输入指令加载配置文件,使配置生效;
sudo ldconfig
(2020.11.6注):上面的操作是啥意思?——这涉及系统调用动态库(也叫共享库)的方式。
1) 当系统加载可执行代码时候,能够知道其所依赖的库的名字,但是还需要知道绝对路径。此时就需要系统动态载入器(dynamic linker/loader)。
2)对于elf格式的可执行程序,是由ld-linux.so*来完成的,它先后搜索elf文件的 DT_RPATH段—环境变量LD_LIBRARY_PATH—/etc/ld.so.cache文件列表—/lib/,/usr/lib 目录找到库文件后将其载入内存。
如何让系统能够找到它:
- 如果安装在/lib或者/usr/lib下,那么ld默认能够找到,无需其它操作。
- 如果安装在其它目录,需要将其添加到/etc/ld.so.cache文件中,步骤如下:
① 编辑/etc/ld.so.conf文件,加入库文件所在目录的路径
② 运行ldconfig ,该命令会重建/etc/ld.so.cache文件
有关动态库静态库的解释可参考:https://www.cnblogs.com/codingmengmeng/p/6046481.html
然后配置opencv的PKG-CONFIG环境——将/usr/local/lib/pkgconfig路径加入到PKG_CONFIG_PATH中;
sudo gedit /etc/bash.bashrc
在末尾添加如下语句,然后保存,退出。
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
好了,到这里有关opencv的所有安装步骤都完成啦,下面是测试opencv能不能用的环节了。
四、测试过程
回到opencv源码解压文件夹,找到 samples -> cpp -> example_cmake 文件夹,在终端打开,输入make编译,生成opencv_example可执行文件。然后输入指令测试该文件;
./opencv_example
正常输出图像
OK~安装完成~测试完成~
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)