01.WinGW+CMake编译opencv

下载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目录下面看到如下文件:

编译之后
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容