在Windows使用mingw32编译opencv
记录opencv编译过程,遇到了很多坑,搜索了很多资料,总结一下。
编译环境
- windows10
- mingw-gcc 8.2.0
- opencv 3.4.5
预先准备的工具
- mingw
主要安装gcc, g++, make工具。可以通过mingw-get安装。安装方法可以在网上搜索到。我安装的最新版本:
d:\work\javaproject>gcc --version
gcc (MinGW.org GCC-8.2.0-3) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编译步骤:
我是在opencv-3.4.5的根目录下,创建的build-mingw目录,目录结构如下:
d:\opencv-3.4.5\build-mingw
-
因为opencv使用cmake编译的,所以要使用CMake生成make文件,运行cmake,选择source和build路径
-
点击Configure按钮,下拉框中选择【MinGW Makefiles】,单选按钮选择【Specify native compiler】
-
点击Next按钮,选择gcc,g++位置
-
点击Finish,如果报错先忽略
-
点击Configure,生成Configure文件,成功后如下图(因为3.4.5版本的过程忘记截图了,所以用了编译4.0.1版本的图)
-
然后就可以点击Generate,生成Makefile文件了
-
接着就在执行
mingw32-make
命令进行 编译,在这个过程中遇到了几个问题,重点说明一下,解决方法,-
问题1:error: ‘SIZE_MAX’ undeclared…,具体如下图(图中的路径为4.0.1,因为在编译3.4.5的时候忘记截图了),解决方法: 在步骤5中的选择项
BUILD_JPEG
和WITH_JPEG
去掉,重新执行6-7步骤,问题解决。 -
问题2:error: ‘strcpy_s’ undeclared…,原因是mingw下没有
strcpy_s
函数,这是MSC的方法,mingw中不存在。解决方法:所以window_w32.cpp文件中的strcpy_s和strcat_s都替换为strncpy和strncat。 -
问题3:与mutex和thread相关的错误,错误内容如下图:
解决方法:如下图:
-
-
如果make成功了,如下图:
-
接着执行
mingw32-make install
,执行成功,会在build-mingw目录下生成一个install目录,这个目录中就是编译的结果,如下图:
整个编译过程总结到这里,抽空再接着讲讲开发环境搭建_。