Windows 10使用Qt配置OpenCV时出现的一些编译错误小记

Windows 10使用Qt配置OpenCV时出现的一些编译错误小记

本人是Qt以及OpenCV新手,使用Windows版本的Qt配置OpenCV,因为需要自己编译,在这里记录下来当个备忘,以及给遇到同样问题的小伙伴做一个参考。本人使用的是OpenCV官方包,下载时可选择页面上的Windows或者Sources,理论上操作相同,使用的都是解压出来的sources文件夹,不过更推荐Sources,毕竟是专门用来编译的。本人使用的Qt版本为5.12.6,编译器为MingW 7.3.0 64-bit,OpenCV下载的是3.4.10。只要版本不是太低,理论上操作相同。前排提醒,编译OpenCV源码时选择的编译器应与Qt编译工程时的相同,如果你在Qt里使用MSVC编译工程,这里就使用MSVC编译OpenCV。
本人安装时参考How to setup Qt and OpenCV on Windows,本文也按此顺序组织(打不开这个网页的点击这里查看,提取码为 jdut )。Qt和CMake的安装很简单,不赘述,问题都出在Compiling OpenCV步骤,这里尽量详细地记录一下:

  1. 首先新建一个文件夹用来存放编译后的文件,按照教程我创建了opencv-build,我的路径为E:\ProgramFiles\OpenCV3\opencv-build,注意路径名不要出现空格,否则不管是后面的编译还是安装完之后#include,都会出现问题(当然使用路径参数时加引号就允许路径名带空格,但没必要自找麻烦)。
  2. 打开cmake-gui.exe,按照教程选择好解压出来的opencv/sources目录以及上一步新建的opencv-build目录,单击Configure,按教程选择好MingWgccg++ 三个工具的路径,单击Finish之后会开始generate,在Name-Value列表出现了许多红色的条目,表示新生成的变量。
  3. 此时观察下方输出的红色文字,本人一开始遇到了Python版本问题,因为我电脑里安装了Python 3.7,而报错信息里提示需要Python 2.7,而且直接给出了解决方案。于是先去 Python官网下载页 下载2.7版本,我下了2.7.18。安装完成之后按照CMake报错的指示,去系统的环境变量设置页面,新建一个PYTHON2_EXECUTABLE变量,并设置正确的值,即新安装的Python 2.7程序路径:
    Windows 10使用Qt配置OpenCV时出现的一些编译错误小记_第1张图片
  4. 此外还有CMake Warning at cmake/OpenCVDownload.cmake:202 (message): FFMPEG: Download failed: 6;"Couldn't resolve host name"这样的错误,同类的有三四个,解释也很直接:Couldn’t download files from the Internet. Please check the Internet access on this host. ,可能是暂时的服务器问题,也可能是被墙了,这里有一篇博文很详细地提供了解决方案:CMake opencv时Download: opencv_ffmpeg.dll、ippicv等失败的解决方法,不再赘述。如果你安装的OpenCV版本和我一样,可以 点击这里 获取opencv_ffmpeg.dll,opencv_ffmpeg_64.dll,ffmpeg_version.cmake文件,提取码为 p73r。
  5. 错误都解决之后,先勾选CMake工具上方的Advanced,就能在下方的Name-Value列表里找到WITH_QTWITH_OPENGL两个变量了,勾选它们。此时没有发现教程里提到的名称为Qt5_DIR的变量,跳过,直接点击左下角的Configure。此时发现Qt5_DIR出现在了Name-Value列表,按教程修改它的值。对教程中提到的其他变量也一同修改,若有的变量不存在,直接忽略即可,估计是版本的问题。都改完之后再次点击Configure,此时下方应该没有红色字体报错,若有则继续按错误提示解决。此步骤完成,关闭CMake。
  6. 接下来按照教程,转入Windows 命令提示符程序,先定位到自己用来存放编译输出的文件夹,我的就是E:\Program Files\OpenCV3\opencv-build,然后执行
mingw32-make

这里可以使用多核编译,提升编译速度,不确定自己的CPU是几核的数字往大了填没关系,如我使用:

mingw32-make -j 12
  1. 在编译到 [ 41%],出现如下报错:
gcc: error: long: No such file or directory
C:\Qt\Tools\mingw730_64\bin\windres.exe: preprocessing failed.
mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1489: modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
mingw32-make[2]: *** Waiting for unfinished jobs....
mingw32-make[1]: *** [CMakeFiles\Makefile2:2220: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
mingw32-make: *** [Makefile:162: all] Error 2

在这里找到了解决方案:MinGW编译OpenCV到vs_version.rc.obj处出错,仔细查看自己的错误代码,按照错误代码定位到出错的文件夹后手动生成vs_version.rc.obj文件即可。这里的windres.exe可以通过 windres.exe --help 命令查看帮助,其实这篇博文里的命令有小错误,-O coff 选项是紧跟在windres.exe命令名之后的。如果出现:

Usage: C:\Qt\Tools\mingw730_64\bin\windres.exe [option(s)] [input-file] [output-file]

就表示命令还是不对,再次强调,[input-file] 和 [output-file] 两个路径参数不能出现空格,我一开始遇到这个错误就是因为有个文件夹名有空格。如果你已经执行到这一步了,可以改用没有空格的相对路径,从当前所在的工作目录开始写路径即可,而不是从盘符开始写的绝对路径,编译安装完成再去改掉文件夹名中的空格。绝对路径与相对路径的知识请自行搜索。

  1. 接下去的编译就没报错了,继续执行mingw32-make,完成编译后执行
mingw32-make install

就安装成功了。按照教程打开Qt,按照教程提供的示例进行验证。多提一句,新建Qt工程的时候要在.pro文件里添几个变量的值,和教程里介绍的略有不同(如果你一开始使用的OpenCV不是Sources包而是Windows可执行文件解压出来的,那就按照教程的来,解压出来就会有这几个INCLUDEPATH,而我这里使用的全都是编译出来的文件):

INCLUDEPATH += E:/ProgramFiles/opencv3/opencv-build/install/include \
               E:/ProgramFiles/opencv3/opencv-build/install/include/opencv \
               E:/ProgramFiles/opencv3/opencv-build/install/include/opencv2

LIBS += E:/ProgramFiles/opencv3/opencv-build/lib/libopencv*

再次提醒,编译Qt工程时选择的编译器一定要和编译OpenCV源码时的相同,因此我这里选择MinGW 64-bit,如果选择MSVC,则会报.dll文件损坏之类的错误。如果你使用MSVC编译了OpenCV源码,那么Qt工程也使用MSVC编译。
Windows 10使用Qt配置OpenCV时出现的一些编译错误小记_第2张图片
至此,配置成功。

你可能感兴趣的:(windows,qt,opencv,cmake,mingw)