visual studio cmake静态编译opencv 以及使用静态库编译可执行文件

参考:https://www.cnblogs.com/thisisajoke/p/12095030.html

提前准备:

visual studio 2019(64位)
opencv-4.3.0
opencv-contrib-4.3.0
cmake-3.1.8(64位)**

编译静态opencv库

步骤:
打开cmake-gui,source目录为opencv目录下source,在opencv目录下新建一个build-static文件作为build目录。(如下图)
visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第1张图片
点击configure按钮,选择visual studio 2019
等待初次configure完成,中间区域内会出现一系列编译选项
visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第2张图片
更改编译选项使得编译为静态库而非动态库:搜索SHARED,在中间区域修改BUILD_SHARED_LIBS的选中状态为OFF(checkbox未选中状态),如图;
在这里插入图片描述
更改编译选项使得包含opencv-contrib-3.4.1中的模块:搜索EXTRA,在中间区域修改OPENCV_EXTRA_MODULES_PATH的Value为opencv-contrib-3.4.1的解压路径下的子路径:OPENCV_CONTRIB_DIR/modules,如图;(注意:不要直接复制路径,要点下图红色框内按钮手动选择,不然会报错visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第3张图片
搜索world,在中间区域修改BUILD_opencv_world设置为true(勾选),这一步是为了让生成的lib文件整合成起来
visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第4张图片
点击Configure按钮开始配置项目,如果存在红色的编译项目,即为出错,需要修改后重新configure,如果没有红色的编译项目,即configure成功visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第5张图片
configure成功后,点击Generate按钮生成visual studio的项目文件
visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第6张图片
点击open project打开visual studio 2015进行opencv的编译,之后就可以关闭cmake了visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第7张图片
设置编译类型为Release x64在这里插入图片描述
右键点击BUILD_ALL,选择生成,需要一定时间,耐心等待visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第8张图片
生成成功visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第9张图片
接下来右键点击INSTALL,选择生成,需要一定时间,耐心等待visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第10张图片
生成成功visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第11张图片
到这里,静态opencv库就编译好了

静态opencv库编译可执行文件

步骤:
打开VS,新建一个空项目
visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第12张图片
依次选择项目—>属性—>VC++目录—>包含目录—>编辑
找到你的包含目录添加就可以了,我的是这样的:(注意配置要改成release,平台改成x64)
visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第13张图片
接下里添加库目录,依次选择项目—>属性—>VC++目录—>库目录—>编辑,我的是这样的visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第14张图片
依次选择项目—>属性—>链接器—>输入—>附加依赖项—>编辑
添加你的库文件名

visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第15张图片
库文件的名字在这里找:(因为编译静态库的时候把库文件打包成了world,所以这里添加剂这一个就好了,如果是debug,文件名就是opencv_world430d.lib,多了一个d,因为我在编译库文件的时候只编译了release版本,所以没有这里没有这个lib文件)visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第16张图片
然后创建opencvConfig.h头文件,加入以下代码来导入所需的库文件
,加粗的部分要和E:\opencv\build-static\install\x64\vc16\staticlib里面的lib文件保持一致,不然会报错,记得对比自己的修改
#pragma once
#include

#define CV_VERSION_ID CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION)

#define CALC_CV_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + ©)

#ifdef DEBUG
#define cvLIB(name) "opencv
" name CV_VERSION_ID “d”
#else
#define cvLIB(name) “opencv_” name CV_VERSION_ID
#endif

// WINDOWS LIBS
#pragma comment(lib, “wsock32”)
#pragma comment(lib, “ws2_32”)
#pragma comment(lib, “kernel32”)
#pragma comment(lib, “user32”)
#pragma comment(lib, “gdi32”)
#pragma comment(lib, “winspool”)
#pragma comment(lib, “comdlg32”)
#pragma comment(lib, “advapi32”)
#pragma comment(lib, “shell32”)
#pragma comment(lib, “ole32”)
#pragma comment(lib, “oleaut32”)
#pragma comment(lib, “uuid”)
#pragma comment(lib, “odbc32”)
#pragma comment(lib, “odbccp32”)

//opencv3.4.1 requirements
#pragma comment(lib,“ade.lib”)
#pragma comment(lib,“IlmImf.lib”)
#pragma comment(lib,“ippicvmt.lib”)
#pragma comment(lib,“ippiw.lib”)
#pragma comment(lib,“libjasper.lib”)
#pragma comment(lib,“libjpeg-turbo.lib”)
#pragma comment(lib,“libpng.lib”)
#pragma comment(lib,“libprotobuf.lib”)
#pragma comment(lib,“libtiff.lib”)
#pragma comment(lib,“libwebp.lib”)
#pragma comment(lib,“zlib.lib”)
#pragma comment(lib,“quirc.lib”)
#pragma comment(lib,“opencv_world430.lib”)

最后点击调试就可以生成一个可以在裸机执行的exe文件了在这里插入图片描述
visual studio cmake静态编译opencv 以及使用静态库编译可执行文件_第17张图片

后记

编译静态opencv库的过程中会遇到很多问题,一bug未平一bug又起,让人头大。不过好在网上都有很多资料可以查询,大家遇到问题的时候多搜索,不要气馁,总能解决的!加油,奥利给!

你可能感兴趣的:(c++,opencv,cmake,visual,studio)