本文将在windows10环境下,vs2022+Cmake3.24.4编译opencv静态库,包括win32-release,win32-debug, x64-release, x64-debug四种;
文章内容有点长,请耐心看下去。
一、安装VS2022
下载链接:https://visualstudio.microsoft.com/zh-hans/downloads/
安装教程参考:https://blog.csdn.net/weixin_42615026/article/details/142755288?spm=1001.2014.3001.5502
二、安装cmake3.24.4
下载链接:https://github.com/Kitware/CMake/releases
建议下载红框中的压缩包,解压即可用。
解压后,可执行程序如,双击运行即可。
三、下载源码并编译opencv库
1、源码下载
1)openCV4.8.0 下载链接: https://opencv.org/releases/
2)openCV4.8.0 contrib 下载链接:https://github.com/opencv/opencv_contrib/releases/tag/4.8.0
两种压缩格式随便选一个。
下载好的压缩包如下:
2、编译源码生成opencv静态库
step1 解压opencv-4.8.0文件,并在根目录下创建 【build】目录,这个用于编译生成x64静态库;
其中,【build2-win32】 用于生成win32静态库。
step2 双击运行截图中的可执行程序
打开后,勾选好两个路径。点击【configure】按钮,中间就会出现参数选项,设置VS版本(选择vs2022),设置目标平台(选择x64),
第一次点击configure,会让你设置一下sln生成平台,大特别注意,第一次选择好路径红色区域是空白的,win32和x64需要分开做两次。
step3 修改构建选项
像上面截图,第一次configure以后,有个configuring done就可以修改中间的参数了。
主要修改以下几个选项,
变量名 | 作用 |
---|---|
BUILD_SHARED_LIBS | 默认勾选,构建动态库;设为FALSE,构建静态库 |
OPENCV_EXTRA_MODULES_PATH | 设置pencv_contrib源码路径 |
BUILD_opencv_world | 是否构建为单个库,默认不构建单个库 |
BUILD_EXAMPLES | 是否构建示例 |
BUILD_TESTS | 是否构建测试 |
BUILD_WITH_STATIC_CRT | 默认勾选,构建MT;设为FALSE,将RuntimeLibrary设置为MD |
修改1:我需要编译静态库,而默认是编译动态库,所以需要把BUILD_SHARED_LIBS勾选取消掉。
修改2:我需要配置contrib库,所以需要配置一下OPENCV_EXTRA_MODULES_PATH对应路径。请特别注意了,路径具体到modules,我第二次生成win32库的时候路径设置为C:\Users\man.zhang\Downloads\opencv_contrib-4.8.0就报错了。
报错示例:
修改3:我需要生成静态库给MD对应的动态库使用,所以需要设置【BUILD_WITH_STATIC_CRT】参数,将默认勾选取消,生成MD静态库;
step4 先configure,再generate
修改好构建项目后,先点击configure,再点击generate,这两个过程我是顺利完成的,成功界面如下。
step5 打开解决方案sln,进行正式编译静态库。
到step4,万里长征正式开始。可以在cmake界面中,点open project按钮,但是我安装了vs2013和vs2022两个版本,默认选择了vs2013,所以就遇到如下报错信息。
请乖乖到sln所在目录下,打开解决方案。
右击选择vs2022打开工程后,打开过程有点卡顿比较慢,多点耐心哦。特别注意,左上角菜单那里,只有release 64,debug64, 是没有win32的,该sln不支持编译win32,win32的静态库,需要到C:\Users\man.zhang\Downloads\opencv-4.8.0\build2-win32\OpenCV.sln工程来编译。我傻不拉几的加了win32编译时报错的,报错截图就不献上了。
如上图,右边的解决方案资源管理器窗口,选择INSTALL,右击进行build生成,就可以等待最终结果了。
如下截图红框中,不带d的是release64库,带d结尾的是debug64库。我选择建立了两个文件夹,把文件分开存放。
到这里基本就编好了x64静态库,需要把全篇步骤再来一遍编译win32静态库。写这篇文中已经耗时45分钟,有点仓促,后续继续完善。今天先到这里吧。