美文网首页
01.WinGW+CMake编译opencv

01.WinGW+CMake编译opencv

作者: AIGame孑小白 | 来源:发表于2023-10-18 12:28 被阅读0次

下载WinGW

MinGW,是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),该库在所有的 NT OS 上有效,在所有的 Windows 95发行版以上的 Windows OS 有效,使用基本运行时,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能(该段内容来自百度百科)

前往下载:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/

或者:

一直往下面滑动找到这里:

解压版本

解压到本地

解压之后

配置环境变量

环境变量

下载CMake

前往官网:https://cmake.org/download/

往下面滑动找到:

安装版

下载好之后安装就行了,我安装的时候勾选了自动配置环境变量,当然也可以不用勾选,如果没有勾选需要手动的把bin目录配置到环境变量

我的安装位置:D:\DevelopeSofts\CMake

安装时选项

去查看环境变量,确保万无一失

环境变量

CMake编译OpenCV源码

(1).前往opencv的安装目录:D:\DevelopeSofts\OpenCV\opencv 创建一个文件夹:build_mingw64 用于存放编译之后的opencv

opencv

(2).前往cmake安装目录,双击cmake-gui程序开始运行cmake

cmake

(3).在cmake-gui程序中配置两个参数:

  • 源码路径:D:\DevelopeSofts\OpenCV\opencv\sources

  • 输出路径:D:\DevelopeSofts\OpenCV\opencv\build_mingw64

配置路径

(4).点击配置

Configure

等待Configure完成

完成

Configure一般不会一次成功,因为FFMPEG总是在cmake的过程中下载失败,FFMPEG是视频编解码需要的库,所以非常必要。

失败内容

尽管Configure第一次无法成功,但还是得点一下才能产生日志,然后才能根据日志去解决问题。第一次Configure后结果见下图,注意到上面一栏中一坨红色,表明配置存在问题,下面可以看到FFMPEG那里都是NO,往上翻一翻日志就会知道是相关的dll下载不成功。

解决Configure失败

可以打开下载日志文件D:\DevelopeSofts\OpenCV\opencv\build_mingw64查看哪些组件下载失败

日志文件

此文件中也会告诉我们到哪里下载缺失的组件。打开该日志文件后可以找到如下信息:

#do_copy "opencv_videoio_ffmpeg_64.dll" "38a638851e064c591ce812e27ed43f1f" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/7da61f0695eabf8972a2c302bf1632a3d99fb0d5/ffmpeg/opencv_videoio_ffmpeg_64.dll" "D:/DevelopeSofts/OpenCV/opencv/build_mingw64/3rdparty/ffmpeg"
#missing "D:/DevelopeSofts/OpenCV/opencv/build_mingw64/3rdparty/ffmpeg/opencv_videoio_ffmpeg_64.dll"
#check_md5 "D:/DevelopeSofts/OpenCV/opencv/sources/.cache/ffmpeg/38a638851e064c591ce812e27ed43f1f-opencv_videoio_ffmpeg_64.dll"
#mismatch_md5 "D:/DevelopeSofts/OpenCV/opencv/sources/.cache/ffmpeg/38a638851e064c591ce812e27ed43f1f-opencv_videoio_ffmpeg_64.dll" "d41d8cd98f00b204e9800998ecf8427e"
#delete "D:/DevelopeSofts/OpenCV/opencv/sources/.cache/ffmpeg/38a638851e064c591ce812e27ed43f1f-opencv_videoio_ffmpeg_64.dll"
#cmake_download "D:/DevelopeSofts/OpenCV/opencv/sources/.cache/ffmpeg/38a638851e064c591ce812e27ed43f1f-opencv_videoio_ffmpeg_64.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/7da61f0695eabf8972a2c302bf1632a3d99fb0d5/ffmpeg/opencv_videoio_ffmpeg_64.dll"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Could not resolve host: raw.githubusercontent.com
# Closing connection
信息

上面的日志至少告诉我们如下信息:1. opencv_videoio_ffmpeg.dll的下载网址;2. 本地存放的路径;3. 需要校验md5。

如果下载网址找不到,就配置一下DNS:打开hosts文件:

185.199.108.133  raw.githubusercontent.com
20.205.243.166  github.com

因为要校验md5,所以我们不能随便下载一个同名dll放到本地存放路径下,必需下载上述网址的dll。接下来手动下载上述文件并放入指定目录中即可。同理下载opencv_videoio_ffmpeg_64.dll和ffmpeg_version.cmake。

需要注意 ffmpeg_version.cmake 点击链接后可能直接打开了链接而不是下载,此时不能使用复制粘贴的方式把信息搞下来,而应该在网页上点右键 -> 另存为的方式保存文件,然后把后缀.txt干掉,不然MD5校验不通过。

1.下载 ffmpeg_version.cmake

看日志信息我的存放位置:D:/DevelopeSofts/OpenCV/opencv/build_mingw64/3rdparty/ffmpeg

cmake

2.下载 opencv_videoio_ffmpeg.dll

3.下载 opencv_videoio_ffmpeg_64.dll

手动

4.下载ade-0.1.2a.zip

解压

5.再次Configure之后就没有报错了

没有报错

继续编译

在上栏中,确保以下几个选项没有被打勾,如果打勾的话可能导致编译失败:

(1)ENABLE_PRECOMPILED_HEADERS

(2)WITH_MSMF

(3)WITH_IPP

(4)WITH_TBB

(5)OPENCV_ENABLE_ALLOCATOR_STATS

(1)-(4)据说是专门为了支持VS而设置的;

(5)如果勾上的话可能出现以下错误:

gcc: error: long: No such file or directory
D:\Program\mingw64\bin\windres.exe: preprocessing failed.
mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1494: modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
mingw32-make[2]: *** Waiting for unfinished jobs…
mingw32-make[1]: *** [CMakeFiles\Makefile2:1882: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
mingw32-make: *** [Makefile:181: all] Error 2
取消选项

在上栏中,有一个很特别的选项,叫BUILD_opencv_world,如果勾上的话,编译后会生成一个比较大的dll,如果不打勾的话,则生成一堆零散的dll。我的反正没有打勾!

点击Generate生成工程,这一步通常没有什么坑,并且速度比较快。

开始生成

进入以及构建好的目录cmd回车

cmd

输入以下命令开始编译:

mingw32-make 或 mingw32-make -j8

开始编译

-j8的意思是使用多线程编译,不然速度有点慢。后面那个8表示线程数,CPU好的话可以改大点,不太好就改小点。

中间如果有warning不用管,只要不是error就行,error会导致编译失败退出。如果error了,下次再编译前最好使用下面命令clean一下之前的错误编译。

mingw32-make clean

编译成功

编译完成之后,就可以在bin目录下面看到如下文件:

编译之后

相关文章

网友评论

      本文标题:01.WinGW+CMake编译opencv

      本文链接:https://www.haomeiwen.com/subject/reccidtx.html