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\binD:\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_EXECUTABLED:\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_DIRD:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Concurrent
    设置 Qt5Core_DIRD:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Core
    设置 Qt5Gui_DIRD:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Gui
    设置 Qt5Test_DIRD:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Test
    设置 Qt5Widgets_DIRD:\ProgramFiles\5.9.3\mingw53_32\lib\cmake\Qt5Widgets
    设置 Qt5OpenGL_DIRD:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5OpenGL
    设置 CMAKE_BUILD_TYPERelease 或者 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\binD:\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”,该问题可能是没有设置环境变量,添加环境变量即可

 

posted on 2019-03-29 13:31  Alliswell_WP  阅读(12175)  评论(1编辑  收藏  举报

导航