
1.2.2 案例2:Linux动态库开发环境搭建
OpenCV Releases中没有提供Linux下的安装包,因此需要读者在Linux系统下编译生成Linux的库文件。
本案例使用的Linux系统为Ubuntu16.04,已经在虚拟机中进行了安装,系统中已经有gcc、g++和Make等工具。另外,还需要安装CMake软件。
对于CMake软件,可以选择源码进行安装,也可以选择下载安装包进行安装,本案例直接下载安装包进行安装。
读者可以去CMake官网下载安装包,在“Download”中选择“Binary distributions”(二进制发布)选项,下载Linux x86_64,如图1.18所示。

图1.18
下载之后选择合适的安装位置并解压:

然后将cmake添加到环境变量中,方法是打开etc/profile,在最后添加CMake软件安装路径:

保存文件,重启机器,执行cmake -version命令,可以查看CMake软件的安装版本,并以此验证安装是否成功。
上述编译环境安装完成后,即可开始编译OpenCV源码,生成库文件,主要包括以下4步。
第1步,下载源码:

为了保持与Windows平台一致,本案例下载的是4.5.2版本的源码,下载之后放置到合适的位置,并解压。
第2步,源码编译。
在进行源码编译之前,需要先安装OpenCV编译需要的环境:

读者可以在源码目录下新建文件夹build,如图1.19所示。

图1.19
此时build文件夹与CMake编译脚本文件CMakeLists.txt文件处于同级目录,进入build文件夹,并右键选择打开终端(Open Terminal),使用cmake命令生成项目文件:

编译选项说明如下。
● -D BUILD_opencv_world=ON:用于打开opencv_world编译开关,生成opencv_world的链接库。
● -D OPENCV_GENERATE_PKGCONFIG=YES:用于生成配置文件opencv4.pc,OpenCV 4.x默认不生成opencv4.pc文件。
cmake执行完成后,会有“Configuring done"和“Generating done”的打印信息,如图1.20所示。

图1.20
在打印信息中,会详细说明生成的项目文件的情况,如所需编译的OpenCV模块信息:


在build目录下会生成项目工程文件MakeFile,进入build目录,使用make命令进行项目编译,如图1.21所示。

图1.21
make编译成功之后,会在build的子文件夹lib中生成二进制库文件,如图1.22所示。

图1.22
其中,libopencv_world.so与libopencv_world.so.4.5两个文件为软链接,读者可以使用这里的libopencv_world.so的库文件和头文件进行链接调用。
另外,读者还可以执行如下命令在本机安装OpenCV编译结果:

上述命令执行后即可在本机上安装OpenCV,库文件和头文件被分别安装在/usr/local/lib和/usr/local/include路径下,如图1.23所示。

图1.23
图1.23中的include文件夹下对应的头文件为opencv4,opencv4中才是常用的OpenCV的头文件的文件夹opencv2,因此,读者需要手动将其复制出来放到外层,便于引用;否则需要在包含路径中多一层opencv4路径:

第3步,环境配置。
环境配置包括以下两方面内容。
● 配置动态链接库加载路径。
打开/etc/ld.so.conf,在其中加上OpenCV动态链接库的路径:

● 环境变量配置。
在/etc/bash.bashrc文件之后加上环境变量PKG_CONFIG_PATH的配置:

这样就真正完成了OpenCV的安装,并完成了环境配置。
第4步,代码测试。
在Ubuntu机器上安装OpenCV 4之后,读者可以编写测试程序以测试安装是否成功,本案例使用读取图像并显示来测试。
新建C++文件,命名为OpenCVTestDemo.cpp,并编写如下读取图像并显示的代码:

执行如下的代码编译命令:

执行后生成可执行文件,读者也可以编写CMake脚本,保存为CMakeLists.txt:


对于上述编译脚本,执行如下编译命令:

编译完成后,生成可执行文件OpenCVTestDemo,执行该文件:

执行结果如图1.24所示。

图1.24
执行后,图像能够正常显示,表明Linux OpenCV C++语言开发环境搭建完成。