Ubuntu18:使用CMake-gui编译OpenCV3源码的详细过程

2023-05-16

目录

一、卸载原来的opencv

二、准备工作

三、编译过程

四、测试过程


由于之前安装的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编译,好处是编译过程更加方便直观。前提是要安装cmakecmake-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~安装完成~测试完成~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18:使用CMake-gui编译OpenCV3源码的详细过程 的相关文章

随机推荐