如何编译opencv库源码
大家好,我是周旋,感谢大家学习【opencv源码解析】系列,本系列首发于公众号【周旋机器视觉】。
上篇文章我们介绍了如何配置opencv环境,搞清了opencv的包含目录include、静态库链接以及动态库链接的作用。
【opencv源码解析0.1】VS如何优雅的配置opencv环境
但环境配置只能让我们使用opencv库,如果要阅读opencv源码,我们就需要编译opencv的源码来生成VS工程,这样才可以完成各个模块、各个文件之间的跳转与阅读。
本教程的环境为
- Visual Studio 2019
- CMake 3.22.3
- opencv 4.6.0
- windows 10
首先进入我们上篇文章中安装的opencv文件夹:
sources就是opencv的源码,是使用cmake进行工程管理的,因此我们使用cmake来重新编译该源码。
安装cmake不再赘述,大家自行百度。
打开cmake-gui:
- 此处为我们待编译的源码路径,即source文件夹
- 构建、编译该源码的build目录路径,我们可以在source文件夹同级路径下建一个source_build文件夹(其实一般都是建build文件夹,但我们source目录已经有一个官方提供build文件夹了)
- cmake的构建选项,这些选项都是由cmake代码中所写的配置选项变量,后面会介绍
- configure配置项目:该操作主要是针对cmake,就是使3中的构建选项生效
- 编译项目:根据3的构建选项,来执行cmake编译source路径源码,并将编译生成的工程存放到source_build路径
1)配置路径
按照上文配置两个路径,然后点击configure来配置项目:
第一次configure会产生一个弹窗,我们选择生成基于x64平台的VS2019工程,点击Finish。经过大概40s的配置过程之后,cmake-gui工具会罗列出opencv库的cmake文件中存在的、提供给用户可配置的一些选项(其实选项很多):
可以看到出现了很多红色的选项,看到红色不要慌,红色不代表配置出错,红色仅代表这些选项是第一次出现在cmake-gui这个界面,用来提示用户注意的,输出文本框底部的Configuring done可以标明我们的配置过程已经完成。
2)opencv的配置选项option
下面我们插讲一下上面我们配置完成后出现的这些配置选项option,在官方的文档中给出了详细的介绍:
https://docs.opencv.org/4.6.0/db/d05/tutorial_config_reference.html
所有选项的功能都可以通过名字在官方文档中找到对应的介绍。
在这儿我们仅介绍几个常用的构建选项:
- BUILD_EXAMPLES:显而易见,是否构建opencv的examples例程
- BUILD_opencv_world:opencv有很多组件,例如core、dnn、imgproc等等,默认情况下该选项为false,此时,我们编译opencv源码生成动态库,会生成各个组件单个的动态库,我们勾选该选项后,则会仅生成opencv_world460.dll这一个动态库
- CMAKE_BUILD_TYPE:构建的默认类型,可以选择Release或Debug类型
3)编译生成工程
了解了options后,我们继续构建我们的opencv源码,首先我们勾选BUILD_opencv_world这个选项,然后点击configure按钮:
我们说过该按钮是让我们的选项生效,因为我们修改了选项内容,因此需要重新configure一次。
然后点击Generate来编译链接我们的源码,生成VS2019的.sln工程文件:
可以看到Generating done字样,表示我们编译成功了,上方的options也恢复了正常颜色。
进入我们的source_build目录:
可以找到我们的OpenCV.sln工程,直接双击打开,就是我们的opencv源码工程了:
直接编译生成,就可以得到opencv_world460.dll了: