OpenCV+Qt+CMake安装+十种踩坑
平台: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安装+十种踩坑的更多相关文章
- CentOS7.4安装MySQL踩坑记录
CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...
- ubuntu 下安装docker 踩坑记录
ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...
- sqlserver安装和踩坑经历
sqlserver安装和踩坑经历 下载 下载 安装 大致是按照这个来的 安装教程 出错 windows系统安装软件弹出"Windows installer service could not ...
- linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(三)
linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(三) 安装PHP 1.yum方式安装PHP方法同安装apache一样传送门:linux cent ...
- linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦
linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(一) 一.Linux下安装MySQL 1.下载 下载地址:http://dev.mysql.co ...
- linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(二)
linux centos7环境下安装apache2.4+php5.6+mysql5.6 安装及踩坑集锦(二) 安装apache web容器 . yum方式安装apache 注意apache在linux ...
- MySQL 5.7版本安装教程-踩坑总结
下载 MySQL下载地址 选择下载64位(看自己电脑是32位还是64位) 点击下载之后,它会让你登录,没有Oracle账户,跟着它的步骤注册一个就好了. 安装 打开下载好的压缩包解压到你的某一目录下, ...
- Linux Mint安装Docker踩坑指南
我家的服务器选用的Linux Mint系统,最近安装Docker的时候踩了一些小坑,但是总体还算顺利. 我们都知道Linux Mint系统是基于Ubuntu的,说实话用起来感觉还是很不错的,安装Doc ...
- MAC下STF安装及踩坑
[Mac OS X]brew: command not found ruby -e"$(curl -fsSL https://raw.githubusercontent.com/Homebr ...
随机推荐
- [转]Java事件处理机制- 事件监听器的四种实现方式
原文来自http://stefan321.iteye.com/blog/345221 自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: ...
- Python微信
""" Description: 需要提供以下三个信息,在申请到的微信企业号当中可以找到 agentid corpid corpsecret Author:Nod Dat ...
- ftok()函数深度解析
[转载] 原文链接:https://blog.csdn.net/u013485792/article/details/50764224 关于ftok函数,先不去了解它的作用来先说说为什么要用它,共享内 ...
- c#继承 里氏转化原则
继承: 是c#中面向对象一个重要概念: 用一个已经存在的类去定义一个新的类 新的类叫做 子类/派生类 已经存在的类叫做 父类/基类 c#中所以类的最终基类都是Object类 声明 访问修饰符 ...
- 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 ...
- [ExcelHome]VLOOKUP的别样用法
请看题: 如上图所示,是某小区多名业主的信息表.如诸君所见,A列是业主的姓名,B列是一些有趣的信息,要求在C列,使用VLOOKUP函数,提取出B列的手机号码. B列的信息真是奇葩,除了手机号码,还有职 ...
- k8s学习笔记之五:Pod资源清单spec字段常用字段及含义
第一章.前言 在上一篇博客中,我们大致简述了一般情况下资源清单的格式,以及如何获得清单配置的命令帮助,下面我们再讲解下清单中spec字段中比较常见的字段及其含义 第二章.常用字段讲解 spec.con ...
- mysql实现IP与整形互转
- filter in Servlet
Servlet过滤器: Servlet过滤器是用于执行某些过滤任务的对象.过滤器可以应用于servlet,jsp或html. Servlet过滤器主要用于以下任务: 预处理: Servlet过滤器用于 ...
- C# 方法参数 out、ref、param 详解
ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为 ref/out形式.两者都可以使函数传回多个结果. ref 类似于 PH ...