在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.

下载地址

  • cmake
    主要是编译opencv用的。我安装的版本是:3.13.4-win64-64。
    下载地址

  • opencv
    我的版本是opencv-3.4.5
    下载地址

编译步骤:

我是在opencv-3.4.5的根目录下,创建的build-mingw目录,目录结构如下:

d:\opencv-3.4.5\build-mingw
  1. 因为opencv使用cmake编译的,所以要使用CMake生成make文件,运行cmake,选择source和build路径
    在Windows使用mingw32编译opencv

  2. 点击Configure按钮,下拉框中选择【MinGW Makefiles】,单选按钮选择【Specify native compiler】
    在Windows使用mingw32编译opencv

  3. 点击Next按钮,选择gcc,g++位置
    在Windows使用mingw32编译opencv

  4. 点击Finish,如果报错先忽略
    在Windows使用mingw32编译opencv

  5. 点击Configure,生成Configure文件,成功后如下图(因为3.4.5版本的过程忘记截图了,所以用了编译4.0.1版本的图)
    在Windows使用mingw32编译opencv

  6. 然后就可以点击Generate,生成Makefile文件了

  7. 接着就在执行mingw32-make命令进行 编译,在这个过程中遇到了几个问题,重点说明一下,解决方法,

    1. 问题1:error: ‘SIZE_MAX’ undeclared…,具体如下图(图中的路径为4.0.1,因为在编译3.4.5的时候忘记截图了),解决方法: 在步骤5中的选择项BUILD_JPEGWITH_JPEG去掉,重新执行6-7步骤,问题解决。
      在Windows使用mingw32编译opencv

    2. 问题2:error: ‘strcpy_s’ undeclared…,原因是mingw下没有strcpy_s函数,这是MSC的方法,mingw中不存在。解决方法:所以window_w32.cpp文件中的strcpy_s和strcat_s都替换为strncpy和strncat。
      在Windows使用mingw32编译opencv

    3. 问题3:与mutex和thread相关的错误,错误内容如下图:
      在Windows使用mingw32编译opencv
      解决方法:如下图:
      在Windows使用mingw32编译opencv

  8. 如果make成功了,如下图:
    在Windows使用mingw32编译opencv

  9. 接着执行mingw32-make install,执行成功,会在build-mingw目录下生成一个install目录,这个目录中就是编译的结果,如下图:
    在Windows使用mingw32编译opencv

整个编译过程总结到这里,抽空再接着讲讲开发环境搭建_