OpenCV使用CMake和MinGW的编译 常见问题见最后

前言

本篇文章是介绍使用32在GW在Windows下编译OpenCV 生成32位的DLL
关于使用 64 位的 MinGW 编译 OpenCV 生成 64 位的 dll,后面更

软件环境

* Windows-10-64bit
* Qt5.11.0
* cmake-3.13.0-rc3-win64-x64
* opencv-3.4.1

opencv的MSVC及MinGW版

MSVC版

下载的 OpenCV 文件夹会有:

build (已编译好的库)
sources (源码)

**使用 MSVC 的话,直接在
build/x64/vc14

里面就有了,配置好路径就可以使用。

MinGW 版

OpenCV 没有为我们编译好 MinGW 版,所以我们只能自己编译,下面就是介绍 MinGW 版的编译流程。

安装及配置 Qt、MinGW、CMake
安装

CMake 自行安装,Qt 和 MinGW 可以直接使用qt-opensource-windows-x86-5.9.3.exe 安装包安装,注意选择安装的组件(components)的时候勾选 MinGW :

Qt-Qt5.9-MingGW 5.3.0 32 bit
Qt-Tools-MinGW 5.3.0

配置 Qt、MinGW

安装好后打开QtCreator,在工具-选项-构建和运行-构建套件,选中Desktop Qt 5.9.3 MinGW 32bit,设为默认,OK。
添加 MinGW 到环境变量

为系统变量 Path 添加 E:\Qt\Qt5.9.3\Tools\mingw530_32\bin
使用 CMake 生成 OpenCV 的 Makefile

打开 cmake-gui,设置源码和生成路径:

Where is the source code: E:/OpenCV_3.3.1/opencv/sources
Where to build the binaries: E:/OpenCV_3.3.1/opencv-build

点击 Configure,设置编译器

Specify the generator for this project: MinGW Makefiles
Specify native compilers
Next
Compilers C: E:\Qt\Qt5.9.3\Tools\mingw530_32\bin\gcc.exe
Compilers C++: E:\Qt\Qt5.9.3\Tools\mingw530_32\bin\g++.exe
Finish

编译配置:

勾选 WITH_QT
勾选 WITH_OPENGL

点击 Configure,再次配置:

不勾选 WITH_IPP
设置 QT_MAKE_EXECUTABLE 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\bin\qmake.exe
设置 Qt5Concurrent_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Concurrent
设置 Qt5Core_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Core
设置 Qt5Gui_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Gui
设置 Qt5Test_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Test
设置 Qt5Widgets_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Widgets
设置 Qt5OpenGL_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5OpenGL
设置 CMAKE_BUILD_TYPE 为 Release 或者 RelWithDebInfo

点击 Generate 生成 Makefile

OpenCVCMakeGenerate
编译 OpenCV

打开终端进行编译:(-j 是使用 8 个线程进行编译,请根据你的计算机配置合理设置线程数)

cd E:\OpenCV_3.3.1\opencv-build
mingw32-make -j 8
mingw32-make install

如果 mingw32-make -j 8 遇到错误,请看下面的 编译 OpenCV 常见错误,否则执行 mingw32-make install,完成安装。

编译 OpenCV 常见错误

0. 多线程编译错误信息不明确,表现如下

如果使用了多线程编译,导致错误,但是错误信息不明确,如:
 Makefile:161: recipe for target 'all' failedmingw32-make: *** [all] Error 2MakeOpenCV_cap_dshow

解决方法
使用单线程编译:
mingw32-make
以查看详细的错误提示,再根据具体情况解决。

1. RC 错误

表现

... windres.exe: unknown option -- W ...

或者

FORMAT is one of rc, res, or coff, and is deduced from the file name
extension if not specified.  A single file name is an input file.
No input-file is stdin, default rc.  No output-file is stdout, default rc.MakeOpenCVRCError

解决

在 cmake-gui 编译配置中:

不勾选 ENABLE_PRECOMPILED_HEADERS

然后重新Configure-Generate-mingw32-make

2. sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA 错误

表现

...opencv/sources/modules/videoio/src/cap_dshow.cpp...
... 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared in this scope ...

或者

Makefile:161: recipe for target 'all' failed
mingw32-make: *** [all] Error 2MakeOpenCV_cap_dshow

解决

修改E:\OpenCV_3.3.1\opencv\sources\modules\videoio\src\cap_dshow.cpp文件,在#include "DShow.h"这行的上面加一行#define NO_DSHOW_STRSAFE,如:

define NO_DSHOW_STRSAFE
include "DShow.h"

然后重新Configure-Generate-mingw32-make

3. identifier ‘nullptr’ is a keyword in C++11 错误【2018年3月2日编译OpenCV 3.4.1时遇到并解决】

表现

D:\opencv-3.4.1\opencv-3.4.1\3rdparty\protobuf\src\google\protobuf\stubs\io_win32.cc:94:3: warning: identifier 'nullptr' is a keyword in C++11 [-Wc++0x-compat]return s == nullptr || *s == 0;^
D:\opencv-3.4.1\opencv-3.4.1\3rdparty\protobuf\src\google\protobuf\stubs\io_win32.cc: In function 'bool google::protobuf::internal::win32::{anonymous}::null_or_empty(const char_type*)':
D:\opencv-3.4.1\opencv-3.4.1\3rdparty\protobuf\src\google\protobuf\stubs\io_win32.cc:94:15: error: 'nullptr' was not declared in this scopereturn s == nullptr || *s == 0;^
3rdparty\protobuf\CMakeFiles\libprotobuf.dir\build.make:412: recipe for target '3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/stubs/io_win32.cc.obj' failed
mingw32-make[2]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/stubs/io_win32.cc.obj] Error 1
CMakeFiles\Makefile2:710: recipe for target '3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all' failed
mingw32-make[1]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all] Error 2
Makefile:161: recipe for target 'all' failed
mingw32-make: *** [all] Error 2MakeOpenCV_nullptr_Error

解决

在 cmake-gui 编译配置中:

勾选 ENABLE_CXX11

然后重新Configure-Generate-mingw32-make

编译完成后,添加 OpenCV 编译的库到环境变量
为系统变量 Path 添加 E:\OpenCV_3.3.1\opencv-build\install\x86\mingw\bin
好了,大功告成!

新增问题:编译opencv3.4.12 遇到问题

qt requires c++11 support

解决办法:在cmake中添加(点击“add entry”按钮)类型string 的组合 Name:OPENCV_ALLOCATOR_STATS_COUNTER_TYPE value:int64_t
如下图:

opencv mingw-32 编译常见问题相关推荐

  1. QT + OpenCV + MinGW 在windows下配置开发环境

           由于研究项目需要,最近开始接触C++界面设计,关于"QT + OpenCV + MinGW在windows下配置开发环境"着实让人头疼,单次配置时间相当长,也十分不容 ...

  2. Windows系统使用minGW+msys 编译ffmpeg 0.5的全过程详述

    一.环境配置 1.下载并安装 MinGW-5.1.4.exe (http://jaist.dl.sourceforge.net/sourcef - -5.1.4.exe),安装时选中 g++, min ...

  3. Qt+大恒相机+OpenCV+MinGW界面开发

    Qt+大恒相机+OpenCV+MinGW界面开发 遇到的坑有哪些? 大恒相机接口的问题(C与C++选谁,傻傻分不清) OpenCV版本与MinGW编译平台适应性问题(编译通过,但是一运行就异常退出) ...

  4. vscode配置opencv环境,包括opencv源码编译(mingw64 + cmake)

    vscode使用了mingw64,在使用官网下载的opencv后,发现有函数提示功能,但是在调试时出现了各种opencv库中的各种函数未定义的情况(如下图代码所示的类型),然后突然明白过来,既然使用了 ...

  5. Windows平台MinGW GCC编译并使用C++ Boost

    Windows平台MinGW GCC编译并使用C++ Boost 文章目录 Windows平台MinGW GCC编译并使用C++ Boost 前提 编译Boost为动态链接库 使用编译的Boost动态 ...

  6. mingw(msys2)编译ffmpeg

    mingw(msys2)编译ffmpeg 首先要确保pacman环境是最新的,否则会出现莫名其妙的问题,可以执行"pacman -Syu"更新包 安装mingw: pacman - ...

  7. 在Windows下使用MinGW静态编译Assimp

    使用MinGW静态编译Assimp 到了5月份了,没有写一篇日志,于是自己从知识库里面拿出一篇文章充数吧.这次将要解说怎样在Windows下使用MinGW静态编译Assimp. Assimp是眼下比較 ...

  8. 解决 OpenCV with CUDA 编译提示缺少 nvcuvid.h 的问题

    解决 OpenCV with CUDA 编译提示缺少 nvcuvid.h 的问题 参考文章: (1)解决 OpenCV with CUDA 编译提示缺少 nvcuvid.h 的问题 (2)https: ...

  9. tx2+opencv源码编译教程(tx2+opencv4.4.0+opencv_contrib-4.4.0)

    tx2+opencv源码编译教程(tx2+opencv4.4.0+opencv_contrib-4.4.0) 一.卸载TX2上已安装的opencv 打开终端,输入以下指令卸载已经安装的opencv: ...

最新文章

  1. Linux 引导过程内幕
  2. python程序员工资低吗-程序员嫌工资低拒绝offer,HR:估计你一辈子就是个程序员...
  3. AUTOSAR从入门到精通100讲(四十一)-基于AUTOSAR与Matlab开发应用层三部曲-应用层总体功能开发和集成
  4. iOS逆向工程(简单利用dumpdecrypted给ipa砸壳)
  5. 再来一个end——好像很有用
  6. 【大数据】Azkaban学习笔记
  7. 公司 MyEclipse设置和SVN安装设置
  8. 关于Alipay支付宝接口(Java版)下
  9. 利用可道云kodexplorer一键部署私有云!路由器免费变NAS!
  10. MySQL-两个表关联查询
  11. sqlserver2000安装时提示挂起并重启
  12. flea-db使用之SQL模板接入
  13. ubuntu 使用代理服务器 squid
  14. 利器解读——Linux 内核调测中最最让开发者头疼的 bug 有解了|龙蜥技术
  15. 为什么Microsoft账号登录显示暂时停用你的账户_Apple ID 被锁定或停用怎么办?
  16. 使用电脑登录邮箱账号的流程是什么?
  17. 五笔打字:速成手册---半小时学会五笔打字
  18. PTA python 求分数序列前N项和
  19. 用pl/sql解决芬兰数学家因卡拉设计的最难数独
  20. android设备什么手机号码,安卓手机如何查看本机号码 查看本机号码的方法有哪些...

热门文章

  1. 千兆12光8电20口管理型工业光纤环网交换机 8千兆电12千兆光工业以太网交换机
  2. 好文:挣值管理(4) - 让挣值管理实用!
  3. 如何用R语言进行云计算
  4. 基于el-table的树形表格及js-xlsx实现下载excel功能(二)
  5. 解决mac无法打开共享的问题
  6. Ventuz 分享制作内容
  7. 在 CentOS7 下安装 Cadence IC验证平台 INCISIVE152
  8. element 表格 最后一行合计。 合并单元格方法
  9. AGM脱机烧录器的使用入门
  10. (29)FPGA实现AD7768接口(八)