平台:win10 x64+opencv-3.4.1 + qt-x86-5.9.0 + cmake3.13.4 x64

OpenCV+Qt+CMake安装,及目前安装完后打包:mingw32-make时报错的处理

一、下载

由于网速原因,官网不好下载,所以给出其他链接

OpenCV下载:https://blog.csdn.net/love666666shen/article/details/76449155

Qt下载:http://www.qtcn.org/bbs/read-htm-tid-1075.html

CMake下载:http://xiazai.zol.com.cn/detail/44/433377.shtml

CMake的官网比较容易打开,我下载了最新版的win x64版:cmake-3.13.4-win64-x64.zip

所以,综上,我下载了:opencv-3.4.1-vc14_vc15.exe + qt-opensource-windows-x86-5.9.0.exe + cmake-3.13.4-win64-x64.zip(官网下的最新版)

二、安装

1.OpenCV安装:opencv-3.4.1-vc14_vc15.exe

见我另一篇博客:Visual Studio 2015部署OpenCV  中四

双击该可执行文件后更改路径(我的是:D:\ProgramFiles)后点击“Extract”即可完成安装

注意:配置配置系统环境变量哦!我的PATH是:D:\ProgramFiles\opencv\build\x64\vc15\bin

备注:OpenCV安装会自动在D:\ProgramFiles文件夹下添加opencv文件夹

2.Qt安装:qt-opensource-windows-x86-5.9.0.exe

双击安装包后->出现Qt5.9.0设置,单击“下一步“->出现账户注册,点击"Skip"->出现欢迎对话框,点击"下一步"->出现安装文件夹对话框,更改后(我的是:D:\ProgramFiles(x86)\Qt5.9.0),

文件夹名字中间不能有空格,点击"下一步"->出现选择组件对话框,在Qt 5.9处勾选:MinGW 5.3.0 32 bit,Tools处勾选:MinGW 5.3.0,点击"下一步"->出现许可协议对话框,选择接受,

点击"下一步"->出现开始菜单快捷方式,输入默认:Qt5.9.0,点击"下一步"->出现已做好安装准备对话框,点击"安装"->出现正在创建维护工具对话框,点击"下一步"->

出现正在完成Qt5.9.0向导对话框,去掉勾选:登录Qt Creator,点击"完成"

附:

“Qt 5.9.1”节点下面是 Qt 的功能模块,包括用于不同编译器和平台的模块,这些模块包括内容如下:

  • MinGW 5.3.0 32 bit 编译器模块。MinGW 是 Minimalist GNU for Windows 的缩写,MinGW 是 Windows 平台上使用的 GNU 工具集导入库的集合。
  • 用于 UWP 编译的模块。UWP 是 Windows 10 中 Universal Windows Platform 的简称,有不同编译器类型的 UWP。
  • 用于 windows 平台上的 MSVC 编译器模块,如 msvc2015 32-bit 和 msvc2015 64-bit 等。要安装 MSVC 编译器的模块,需要计算机上已经安装相应版本的 Visual Studio。
  • 用于 Android 平台的模块,如 Android x86 和 Android ARMv7。
  • Sources 是 Qt 的源程序。
  • Qt Charts是二维图表模块,用于绘制柱状图、饼图、曲线图等常用二维图表。
  • Qt Data Visualization 是三维数据图表模块,用于数据的三维显示,如散点的三维空间分布、三维曲面等。
  • Qt Purchasing、Qt WebEngine、Qt Network Auth(TP)等其他模块,括号里的 TP 表示技术预览。
  • Qt Scritp(Deprecated)是脚本模块,括号里的“Deprecated”表示这是个已经过时的模块。

“Tools”节点下面是一些工具软件,包括内容如下:

    • Qt Creator 4.3.1 是用于 Qt 程序开发的 IDE。
    • MinGW 5.3.0 是 MinGW 编译工具链。
    • Strawberry Perl 是一个 Perl 语言工具。

注意:QT配置系统环境变量需要添加两个路径

我的是:D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin和D:\ProgramFiles\Qt5.9.0\5.9\mingw53_32\bin,两个路径稍微有些差别,一定要小心哦!

3.CMake安装: cmake-3.13.4-win64-x64.zip(官网下的最新版)

cmake-3.13.4-win64-x64.zip解压即可,我的是放到:D:\ProgramFiles文件夹下

注意:配置配置系统环境变量哦!我的PATH是D:\ProgramFiles\cmake-3.13.4-win64-x64\bin

另外附上exe的安装:

CMake3.4.3.exe安装

双击安装包后->出现欢迎使用CMake3.4.3安装向导对话框,单击“下一步“->出现许可证协议对话框,点击"我接受"->出现安装选项对话框,选择:Add CMake to the system  PATH for all users

,勾选:创建桌面快捷方式,点击"下一步"->出现选择安装位置对话框,更改后(我的是:D:\ProgramFiles(x86)\CMake),点击"下一步"->出现选择“开始菜单”文件夹对话框,

默认输入:CMake 3.4.3,点击"安装"->点击"完成"。

注意:配置配置系统环境变量哦!注意:配置配置系统环境变量哦!注意:配置配置系统环境变量哦!注意:配置配置系统环境变量哦!

注意:配置配置系统环境变量哦!

OpenCV的编译

进入CMake->设置源代码和编译目标文件的路径(在D盘新建一个文件夹:buildOpenCV,用于存放编译后的目标文件,我的编译目标文件的路径:D:\Working\buildOpenCV和源文件的路径:

D:\ProgramFiles\opencv\sources)-> 点击“Configure按钮”,出现配置对话框->在“Specify the generator for this project”内选择“MinGW Makefiles”选项,在下边的编译器类型中,选择:

“Specify native compilers”,单击“Next”->在编译器选择器选择界面,在C后面选择C编译路径(我的为:D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin\gcc.exe),C++后选择C++编译器路径

(我的为:D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin\g++.exe),单击“Finish”按钮->单击“Configure”按钮

在配置完成后,选中"WITH_OPENGL"、"WITH_QT",将“WITH_IPP”取消选择,->再次单击“Configure”按钮

最后,在Name表中把变红色的路径更改下:

点击 ”Configure“,再次配置:(以我的为例)
    不勾选 WITH_IPP
    设置 QT_MAKE_EXECUTABLE 为 D:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\bin\qmake.exe  备注:此项没有,需要点击Add Entry添加

    Name:QT_MAKE_EXECUTABLE ,Type: PATH ,Value:D:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\bin\qmake.exe
    设置 Qt5Concurrent_DIR 为 D:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Concurrent
    设置 Qt5Core_DIR 为 D:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Core
    设置 Qt5Gui_DIR 为 D:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Gui
    设置 Qt5Test_DIR 为 D:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Test
    设置 Qt5Widgets_DIR 为 D:\ProgramFiles\5.9.3\mingw53_32\lib\cmake\Qt5Widgets
    设置 Qt5OpenGL_DIR 为 D:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5OpenGL
    设置 CMAKE_BUILD_TYPE 为 Release 或者 RelWithDebInfo

再次点击 “Configure”,再次配置

安装过程十种踩坑

1.Cmake configure后一直报错——opencv_ffmpeg_dll,opencv_ffmpeg_64_dll下载超时

解决方案:在编译目标文件的路径(我的是:D:\Working\buildOpenCV)下找到CMakeDownloadLog.txt,里边有opencv_ffmpeg_dll和opencv_ffmpeg_64_dll下载链接:

(类似于:https://raw.githubusercontent.com/opencv/opencv_3rdparty/${FFMPEG_BINARIES_COMMIT}/ffmpeg/)ocv_download(PACKAGE opencv_ffmpeg.dll)

分别输入到浏览器下载两个的文件,如果浏览器打不开,用手机下载,然后传到电脑上,并放到“编译目标文件的路径\3rdparty\ffmpeg”文件夹下

(我的是—D:\Working\buildOpenCV\3rdparty\ffmpeg)

2.之前下载的opencv_ffmpeg_dll,opencv_ffmpeg_64_dll拷贝入“编译目标文件的路径\3rdparty\ffmpeg”文件夹下,Cmake configure后还是报错——opencv_ffmpeg_dll,opencv_ffmpeg_64_dll下载超时

这是因为:下载opencv_ffmpeg_dll,opencv_ffmpeg_64_dll时默认以MD5校验,就是每次下载的文件内容一样,但是MD5检验码不一样

两种解决方案:

1)重新下载

2)在“OpenCV的解压路径\opencv\sources\.cache\ffmpeg”文件夹下,然后改名(我的更改为:b8120c07962d591e2e9071a1bf566fd0-opencv_ffmpeg.dll和dc9c50e7b05482acc25d6ce0ac61bf1d-opencv_ffmpeg_64.dll),此MD5校验码去编译目标文件的路径(我的是:D:\Working\buildOpenCV)下找到CMakeDownloadLog.txt

下分别对应拷贝,拷贝后更改文件名:MD5-opencv_ffmpeg.dll和MD5-opencv_ffmpeg_64.dll。

注意opencv_ffmpeg_dll和opencv_ffmpeg_64_dll的MD5检验码不一样哦!

3.执行mingw32-make报错——D:\ProgramFiles不是内部或外部命令

解决方案:路径添加——D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin

注意:QT配置系统环境变量需要添加两个路径:D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin和D:\ProgramFiles\Qt5.9.0\5.9\mingw53_32\bin,

两个路径稍微有些差别,一定要小心哦!

4.执行mingw32-make报错——D:\ProgramFiles不是内部或外部命令

查资料疑似路径包含中文字符,重新卸载CMake后安装CMake,依旧报错,发现CMake会默认source code和binaries不变->删除buildOpenCV文件夹

下所有内容,重建buildOpenCV(编译后的目标文件夹)->按照Cmake的工程配置,仍然报错

最后发现CMake的Compelers的对话框中路径字符错误:(后边的斜杠错误)

C后边是——D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin/gcc.exe

C++后边是——D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin/g++.exe

解决方案:

C后边是——D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin\gcc.exe

C++后边是——D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin\g++.exe

注意:window下的路径后边的斜杠是“\”,而浏览器的是“/”

5.重新安装OpenCV后,CMake点击configure报错:无用的字符... invalid...

解决方案:发现CMake会默认source code和binaries不变->删除buildOpenCV文件夹下所有内容,重建buildOpenCV(编译后的目标文件夹)->

把OpenCV的最新安装路径放在在source code,然后按照Cmake的工程配置,正常

注意:重新安装OpenCV后系统环境变量也要更改哦!

6.执行mingw32-make -j8报错——多线程编译错误信息不明确

解决方案:使用单线程编译

备注:make -jn

n为线程数,比如,我想要4线程编译:make -j4

7.执行mingw32-make报错:... 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.

解决方案:

在 cmake-gui 编译配置中:

  • 不勾选 ENABLE_PRECOMPILED_HEADERS

然后重新Configure-Generate-mingw32-make

8.执行mingw32-make到24%报错——D:\ProgramFiles\opencv\sources\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;

解决方案:

在 cmake-gui 编译配置中:

勾选 ENABLE_CXX11

然后重新Configure-Generate-mingw32-make

9.执行mingw32-make后45%左右遇到这种错误 :

sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA 错误

解决方案:
修改E:\OpenCV_3.3.1\opencv\sources\modules\videoio\src\cap_dshow.cpp文件,在#include "DShow.h"这行的上面

加一行#define NO_DSHOW_STRSAFE

然后重新Configure-Generate-mingw32-make

10.执行mingw32-make后然后继续编译,一路顺畅,然而98%时死掉:

报错如下:

[ 98%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.obj

C:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++/cmath:1119:11: error: '::hypot' has not been declared

using ::hypot;

解决方案:
把CMake配置中的BUILD_opencv_python3和下面那个BUILD_opencv_python3_bindings_generator的off掉(把后边的勾选去掉)

然后重新Configure-Generate-mingw32-make

注意:如果不使用opencv_python,需要在CMake界面取消勾选BUILD_opencv_python以及其他和 opencv_python有关的选项,否则编译不通过。

另外还有其他错误—可见此博客:https://blog.csdn.net/u010847519/article/details/61196093

以上只是通常出现的情况,其他情况请看Qt官网的帮助文档https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows

 

附—常见十大编译问题解决方案:

1)将"opencv安装目录\sources"内的“cmakeOpenCVCompilerOptions.cmake”文件打开,
将其中的语句add_extra_compiler_option(-Werror=non-virtual-dtor)进行注释,改为# add_extra_compiler_option(-Werror=non-virtual-dtor)

2)在编译的过程中,可以在语句的末尾加上“-i”忽略错误,即使用语句:

mingw32-make -i

mingw32-make install -i

3)查看CMake的路径是否包含空格,如果包含,卸载重装

4)查看需要加入的系统路径,是否都添加了

5)查看CMake的Configure是否选为了MinGW Makefiles

6)自己定位Qt自带的C、C++编译器的位置:

C编译器的位置为——Qt安装路径\Qt5.9.0\Tools\mingw530_32\bin\gcc.exe

C++编译器的位置为——Qt安装路径\Qt5.9.0\Tools\mingw530_32\bin\g++.exe

7)在"二进制目标文件路径/CMake/CMakeOutput.log"、“二进制目标文件路径/CMake/CMakeError.log”内查找问题,从而发现解决方案

8)不能编译运行,提示找不到编译器,可能是因为在目录下面有中文符号

9)编译器内不能显示光标,此问题可能是因为使用谷歌输入法造成的,修改内嵌编辑模式

10)编译可以运行,在debug模式下exe文件无法运行,提示“无法启动此程序,因为程序中丢失qt5cored.dll”,该问题可能是没有设置环境变量,添加环境变量即可

OpenCV+Qt+CMake安装+十种踩坑的更多相关文章

  1. CentOS7.4安装MySQL踩坑记录

    CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...

  2. ubuntu 下安装docker 踩坑记录

    ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...

  3. sqlserver安装和踩坑经历

    sqlserver安装和踩坑经历 下载 下载 安装 大致是按照这个来的 安装教程 出错 windows系统安装软件弹出"Windows installer service could not ...

  4. linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(三)

    linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(三) 安装PHP 1.yum方式安装PHP方法同安装apache一样传送门:linux cent ...

  5. linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦

    linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(一) 一.Linux下安装MySQL 1.下载 下载地址:http://dev.mysql.co ...

  6. linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(二)

    linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(二) 安装apache web容器 . yum方式安装apache 注意apache在linux ...

  7. MySQL 5.7版本安装教程-踩坑总结

    下载 MySQL下载地址 选择下载64位(看自己电脑是32位还是64位) 点击下载之后,它会让你登录,没有Oracle账户,跟着它的步骤注册一个就好了. 安装 打开下载好的压缩包解压到你的某一目录下, ...

  8. Linux Mint安装Docker踩坑指南

    我家的服务器选用的Linux Mint系统,最近安装Docker的时候踩了一些小坑,但是总体还算顺利. 我们都知道Linux Mint系统是基于Ubuntu的,说实话用起来感觉还是很不错的,安装Doc ...

  9. MAC下STF安装及踩坑

    [Mac OS X]brew: command not found ruby -e"$(curl -fsSL https://raw.githubusercontent.com/Homebr ...

随机推荐

  1. [转]Java事件处理机制- 事件监听器的四种实现方式

    原文来自http://stefan321.iteye.com/blog/345221 自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: ...

  2. Python微信

    """ Description: 需要提供以下三个信息,在申请到的微信企业号当中可以找到 agentid corpid corpsecret Author:Nod Dat ...

  3. ftok()函数深度解析

    [转载] 原文链接:https://blog.csdn.net/u013485792/article/details/50764224 关于ftok函数,先不去了解它的作用来先说说为什么要用它,共享内 ...

  4. c#继承 里氏转化原则

    继承: 是c#中面向对象一个重要概念: 用一个已经存在的类去定义一个新的类 新的类叫做   子类/派生类 已经存在的类叫做   父类/基类 c#中所以类的最终基类都是Object类 声明 访问修饰符  ...

  5. ubuntu下安装owncloud提示没有zip模块时

    wget http://pecl.php.net/get/zip-1.13.5.tgztar -zvxf zip-1.13.5.tgzcd zip-1.13.5phpize ./configure m ...

  6. [ExcelHome]VLOOKUP的别样用法

    请看题: 如上图所示,是某小区多名业主的信息表.如诸君所见,A列是业主的姓名,B列是一些有趣的信息,要求在C列,使用VLOOKUP函数,提取出B列的手机号码. B列的信息真是奇葩,除了手机号码,还有职 ...

  7. k8s学习笔记之五:Pod资源清单spec字段常用字段及含义

    第一章.前言 在上一篇博客中,我们大致简述了一般情况下资源清单的格式,以及如何获得清单配置的命令帮助,下面我们再讲解下清单中spec字段中比较常见的字段及其含义 第二章.常用字段讲解 spec.con ...

  8. mysql实现IP与整形互转

  9. filter in Servlet

    Servlet过滤器: Servlet过滤器是用于执行某些过滤任务的对象.过滤器可以应用于servlet,jsp或html. Servlet过滤器主要用于以下任务: 预处理: Servlet过滤器用于 ...

  10. C# 方法参数 out、ref、param 详解

    ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为 ref/out形式.两者都可以使函数传回多个结果. ref 类似于 PH ...