如果你是在Windows上搞C/C++开发、或者正跟着Qt教程一步步搭环境,十有八九会卡在一个叫MinGW的下载环节。教程里就一句话“请先安装MinGW”,然后你点进官网,发现页面跳转得极其痛苦,下载速度像蜗牛爬,好不容易下了个文件,双击一看是个广告捆绑安装器,心态直接崩掉。这篇文章就是来把你从这套流程里捞出来的,我会把MinGW到底是什么、为什么下载一直失败、哪些渠道真正靠谱、装完之后如何配置、以及报错之后怎么排查,一条龙讲清楚。
这篇内容适合所有刚入门MinGW的读者,也适合那些已经被Qt的Kit报错折磨到怀疑人生的开发者。我尽量说人话,每个步骤都给到具体的操作路径和判断标准,你看完可以直接照着做。
1. 为什么MinGW的下载安装永远这么闹心——先说清它到底是干什么的
1.1 它和MSVC的差别,直接决定你怎么选
MinGW的全称是Minimalist GNU for Windows,本质上就是把GNU编译器工具链(GCC)整体迁移到Windows平台上的一套发行版。换句话说,你本来是在Windows上写代码,但用的不是微软自家那套MSVC编译器,而是开源社区维护的GCC编译器。再直白一点:同样一份C/C++代码,用MSVC编译和用MinGW编译,走的是两套完全不同的编译规则和运行时环境,生成出来的二进制文件、依赖库、甚至函数命名规则都不一样。
MSVC和MinGW的区别,是很多新手最容易懵的地方,但实际上你只需要抓住几个关键点:
| 对比维度 | MSVC | MinGW |
|---|---|---|
| 编译器来源 | 微软官方,闭源 | GNU开源社区,基于GCC |
| 安装体积 | 需要装Visual Studio,动辄几个GB | 压缩包几百MB以内,解压即用 |
| 标准库实现 | UCRT/MSVCRT | MinGW-w64自带运行时库 |
| 默认调试器 | Visual Studio调试器 | GDB |
| 许可证 | 商业软件,免费版有限制 | 完全开源免费 |
| 与Qt的配合 | Qt有MSVC预编译包,但要求VS版本匹配 | Qt官方也发布MinGW版安装包,使用门槛低 |
大多数Qt初学者选MinGW,不是因为MinGW比MSVC更好,而是因为它够轻、够省事。尤其是我这种不想为了一个控制台程序就装十几个GB Visual Studio的人,MinGW简直是救命稻草。
1.2 为什么Qt开发绕不开MinGW
Qt本身是一个跨平台框架,但它在Windows上输出的代码,最终还是要交给某个编译器去生成可执行文件。Qt官方对Windows平台提供了两种主流的预编译包:MSVC版本和MinGW版本。你下载Qt安装包时,在线安装器会让你勾选组件,其中就包含“MinGW x.x.x 32-bit/64-bit”这一类选项。
问题在于,Qt的每个版本对MinGW的版本是有隐式绑定关系的。比如Qt 5.9.x时代的安装包配套的是MinGW 5.3.0,Qt 5.12以后常见的是MinGW 7.3.0,到了Qt 6.x时代,官方推荐的是MinGW 11.2.0及以上。如果你自己在官网随便下载了一个最新版MinGW去配老版本Qt,很多情况下Qt Creator会直接提示编译器版本不兼容,甚至干脆不认这个编译器。
这也是为什么“error while building/deploying project qtmodbus (kit: desktop qt 5.9.9 mingw)”这类报错会成为热搜词,因为版本错配太常见了。
1.3 下载失败不是你的网络问题,是这些坑在作怪
在往下聊渠道之前,我们得先认清一个事实:MinGW下载失败,很多时候还真不是你一个人网络的问题。我自己就踩过这么几个坑:
首先是SourceForge的CDN链路。MinGW官网的Downloads按钮会跳转到SourceForge托管页面,这个平台在国内的网络环境下,下载速度极其不稳定,经常出现进度条爬到90%之后直接卡死的情况。更烦人的是,SourceForge页面上有各种“Recommended Project”广告位,稍不注意就会下载到一个不明来路的exe安装器,打开以后全是在给你装其他捆绑软件。很多新手说“我从官网下载了MinGW但安装后没有gcc”,十有八九就是下载到了广告文件。
其次是GitHub Releases的稳定性问题。MinGW-w64的构建产物也托管在GitHub上,但GitHub的大文件下载在部分地区同样存在速度波动大的问题,特别是压缩包超过100MB之后,浏览器默认下载一旦断线,就必须重新开始。加上浏览器本身不支持断点续传,这个过程非常折磨人。
第三是杀毒软件的误报。MinGW里的很多编译工具文件(比如gcc.exe、g++.exe、mingw32-make.exe)因为带有执行权限和代码生成逻辑,经常会被某些安全软件当成“风险工具”直接隔离或拦截。你解压完了才发现bin目录下少了一堆文件,编译器自然无法使用。
这些坑叠加在一起,就导致了MinGW“下载失败”的观感极其常见。下面我直接给你一套能落地执行的下载方案。
2. 三步拿到MinGW的可靠渠道:镜像站优先于官网直连
2.1 渠道一:SourceForge的镜像节点选择技巧
如果你还是想坚持从SourceForge下载,至少要学会手动选择镜像节点。
具体操作是这样:打开MinGW-w64的SourceForge页面后,找到你需要下载的文件(通常是类似x86_64-posix-seh这种命名的压缩包),点击下载后会进入一个自动跳转的过程。此时不要干等着,注意页面上会有“Problems with download? Try another mirror”这样的提示链接,点进去就能手动选择镜像。我建议优先尝试Pegasus、iweb、managedway这几个节点,它们在大文件传输时表现相对稳定。
另外,下载的压缩包格式建议优先选.tar.xz或者.zip里的zip格式。tar.xz虽然体积小,但Windows自带的解压工具并不支持,你还得额外装7-Zip,对于新手来说zip格式最省心。
但如果SourceForge的页面你根本打不开,或者加载速度慢到无法忍受,那就直接跳到下一个方案。
2.2 渠道二:通过国内镜像站拉取
国内镜像站是我目前在Windows上安装MinGW的最优先选择。以清华大学的TUNA镜像站为例,它的同步源里包含了MinGW-w64的完整目录,你不需要注册,不需要登录,直接用浏览器或者下载工具就能拉取文件。
镜像站地址的路径一般是https://mirrors.tuna.tsinghua.edu.cn/...下面挂载mingw-w64相关目录。进入后选择你需要版本文件夹,按需下载对应的压缩包到本地。除了清华镜像外,中科大、阿里云等镜像站也有类似的支持,你可以挑一个自己访问速度最快的。
用镜像站的另一个好处是:支持断点续传。如果你使用IDM、Free Download Manager这类下载工具,即使中途断了,也不需要从头再来。如果你没有下载工具,也可以改用浏览器内置的下载功能,搭配镜像站的稳定链路,体验已经比直连SourceForge好太多。
2.3 渠道三:Qt安装器自带的MinGW组件
有一种情况很多人不了解:如果你已经安装了Qt的在线安装器,那么你完全可以不用单独去下载MinGW。
Qt官方在线安装器在“选择组件”那一步,会有一个“Tools”分类,展开后能找到“MinGW x.x.x”目录。这个目录下就是Qt官方帮你测试过、确定与当前Qt版本匹配的MinGW编译器。你只需要勾选对应组件,安装器会自动完成下载和解压,省去环境变量和版本匹配的麻烦。
如果你的Qt安装器里看不到MinGW组件,常见原因是安装时没有勾选“Tools”分类,或者安装器版本太老。这时候重新打开安装器,选择“添加/移除组件”,把对应的MinGW勾上就行。这个方法非常适合还在用Qt 5.15.2、Qt 5.14这种老版本进行项目维护的同学,因为这类版本对MinGW的版本有硬性要求,使用Qt自带组件是最稳的。
你可能会问,为什么官方安装器下MinGW就不会失败?因为Qt安装器本身有一套完整的下载重试和校验机制,它对下载中断、文件损坏的处理要比浏览器强很多。所以遇到渠道问题时,优先用安装器去解决,这本身就是一条极好的思路。
3. 解压、配环境变量、验证编译器——三步确认装好了
3.1 解压位置和目录结构
不管你从哪个渠道拿到MinGW压缩包,下载完成后第一件事不是双击运行(因为MinGW根本不需要安装器),而是把它解压到一个你记得住的纯英文路径下。
我个人的习惯是解压到D盘的根目录下,比如D:\mingw64。请注意三个细节:
- 路径中不要包含中文、空格和特殊符号。很多编译工具链对路径里的空格处理不好,后续你配置Qt时会莫名奇妙出问题。
- 不要解压到需要管理员权限才能写入的目录。像
C:\Program Files这种路径,除非你用管理员身份打开解压软件,否则解压过程中很容易权限不足,文件缺失后你根本不知道。 - 记住解压后的bin目录位置。MinGW的所有可执行文件都在
bin目录下,比如gcc.exe、g++.exe、gdb.exe、mingw32-make.exe。后续配置环境变量、配置Qt编译器,都是指向这个目录。
解压完成后,你可以打开D:\mingw64\bin看一眼,确认里面至少有gcc.exe和g++.exe。如果没有,说明你的压缩包有问题或者被杀毒软件拦截了一部分文件,这时候要去检查安全中心的隔离记录,把被隔离的文件恢复出来。
3.2 环境变量配置的两种方式
MinGW装好之后,必须把bin目录加入系统的PATH环境变量,否则你在命令行里敲gcc --version会提示“不是内部或外部命令”。
最简单的方式是图形界面操作:右键“此电脑” -> 属性 -> 高级系统设置 -> 环境变量,在“系统变量”里找到名为Path的变量,点击编辑,新建一行,填入D:\mingw64\bin,然后一路确定保存。
这里有一个很实用的提醒:改完环境变量后,已经打开的终端窗口不会自动生效。你需要重新打开一个cmd窗口,或者重启一下Qt Creator。很多人在这一步反复试了几次都觉得“我明明改了PATH怎么还是不行”,其实就是没重开终端。
如果你习惯命令行操作,也可以用setx命令快速添加:
setx PATH "D:\mingw64\bin;%PATH%"注意setx有字符串长度限制,如果你的PATH变量已经非常长了,这条命令可能截断原有内容。所以我个人更推荐用图形界面操作,安全稳妥。
3.3 用一行命令验证编译器可用性
配置完环境变量并重开终端后,验证MinGW是否生效只需要一个命令:
gcc --version如果输出类似:
gcc (MinGW-W64 x86_64-posix-seh) 8.1.0 Copyright (C) 2018 Free Software Foundation, Inc. ...说明编译器已经可以正常使用。我还会顺手再验证两个工具:
g++ --version mingw32-make --versiong++用于编译C++代码,mingw32-make用于执行Makefile。在Qt项目中,后者的路径通常需要手动指定到Qt Creator的构建环境里,所以提前确认它存在非常重要。
如果你想写一个最基础的C++文件测试编译,也可以找一个文件夹新建hello.cpp,写入:
#include <iostream> int main() { std::cout << "Hello, MinGW!" << std::endl; return 0; }然后执行:
g++ hello.cpp -o hello.exe hello.exe能看到“Hello, MinGW!”的输出,就说明整个工具链已经彻底跑通了。
4. 把MinGW挂到Qt/Kits里:版本匹配才是关键
4.1 Qt与MinGW的版本对应关系
很多人的MinGW下载安装都没问题,但一到Qt Creator里就报错,原因基本集中在版本匹配上。Qt的每个大版本发布时,都会针对一个特定版本的MinGW做适配,官方不会保证“任何MinGW版本都能用”。
我根据实际使用经验整理了常见搭配:
| Qt版本 | 官方配套MinGW | 位数 |
|---|---|---|
| Qt 5.9.x | MinGW 5.3.0 | 32位 |
| Qt 5.12.x | MinGW 7.3.0 | 64位 |
| Qt 5.14.x / 5.15.x | MinGW 8.1.0 | 64位 |
| Qt 6.2.x | MinGW 11.2.0 | 64位 |
| Qt 6.5.x及以后 | MinGW 11.2.0及以上 | 64位 |
这里特别要提醒一个坑:很多人在2024年之后才下载Qt 5.9.9这种老版本,然后搭配了一个最新版的MinGW-w64编译器,结果Qt Creator在编译时直接报“cannot find -lglu32”或者“compiler cannot produce code”之类的错误。这些报错看起来千奇百怪,根源就是版本不匹配。
所以,在你下载MinGW之前,先查清楚你用的Qt版本到底配套哪个MinGW,再去下载对应版本。这也是“qt 5.15.2 mingw 离线包 下载”这类搜索词热度居高不下的原因——版本锁定太重要了。
4.2 在Qt Creator里手动注册编译器
如果你使用Qt安装器自带的MinGW,Qt Creator一般会自动识别,不需要额外配置。但如果你是自己下载的MinGW,那么大概率需要在Qt Creator里手动注册一下。
具体路径是:Qt Creator菜单栏 -> 工具 -> 选项 -> Kits -> 编译器选项卡(Compilers)。在编译器页面点“添加”-> “GCC”-> “C++”,然后在“编译器路径”一栏选择D:\mingw64\bin\g++.exe。同理再添加一个C语言编译器,指向gcc.exe。
添加完之后,还需要在“Qt Versions”选项卡里确认qmake路径。qmake是你Qt安装目录下的一个可执行文件,比如D:\Qt\Qt5.15.2\5.15.2\mingw81_64\bin\qmake.exe。如果这里的路径是空的或者指向了MSVC版本,也会导致Kit不可用。
最后回到“Kits”选项卡,新建或编辑一个Kit,把“编译器”里的C和C++都选成刚才添加的MinGW编译器,“Qt Version”选成刚才确认的qmake版本,“CMake”如果有需要也一并指定。保存之后,这个Kit才能正常构建项目。
4.3 最容易踩的32位/64位陷阱
版本匹配之外,另一个高频坑是位数不匹配。简单来说,你在Qt安装器里如果选择的是mingw81_64目录下的Qt库,那么你的MinGW编译器也必须是64位版本的;如果你用了32位的编译器去链接64位的Qt库,链接阶段会报一堆莫名其妙的“undefined reference”错误。
判断方法很简单:下载MinGW时看压缩包的名字,含有x86_64的就是64位,含有i686的就是32位。在Qt Creator的Kits页面里也可以看到编译器名称后面是否带有(x86_64)的标记。
还有一个小技巧:如果你不确定自己的Qt装的到底是32位还是64位,直接看安装路径。Qt默认的安装目录下会明确标注,比如D:\Qt\Qt5.15.2\5.15.2\mingw81_64里的“_64”就是64位,mingw53_32里的“_32”就是32位。对照着去选MinGW,基本不会出错。
5. 实操案例:Qt 5.9.9 MinGW Kit编译报错的完整排查链路
5.1 报错现场还原
这里我直接还原一个真实场景,也是搜索热词里出现过的典型问题:打开Qt Creator后,加载了一个名为qtmodbus的项目,在Kit栏里选择了“Desktop Qt 5.9.9 MinGW”,然后点构建,结果编译输出窗口出现:
error while building/deploying project qtmodbus (kit: desktop qt 5.9.9 mingw)点开详细信息后,往往还会看到:
The compiler "...\g++.exe" cannot produce code for the Qt version "Qt 5.9.9" (x86)或者:
"g++" is not recognized as an internal or external command这两个报错看起来都像是“编译器不行”,但实际原因完全不同。第一个是编译器版本与Qt库不匹配,第二个是PATH环境变量没有生效。如果不加判断直接重装,很容易浪费时间。
5.2 排查链路第1~4步
我建议按以下顺序逐层排查:
第一步,确认编译器路径本身是否有效。在Qt Creator的“工具 -> 选项 -> Kits -> 编译器”里,选中当前的GCC编译器,查看编译器路径是否确实指向了g++.exe。如果路径是空的、或者指向了不存在的文件,说明是路径配置问题。
第二步,验证PATH是否真的生效。打开cmd,输入where g++,如果系统提示找不到,说明你的PATH配置没有作用。这时候重新检查环境变量,并记得重开终端和Qt Creator。如果你在cmd里能正常看到g++路径,但在Qt Creator的构建环境里仍报“not recognized”,那么还需要检查Kit设置里的“环境”项,看是否存在覆盖PATH值的配置。
第三步,检查位数匹配。确认Qt库是32位还是64位,确认编译器是32位还是64位。这一步直接把两边路径打开对照就行,Qt库的位数看安装目录里的名字,编译器的位数可以用命令查看:
g++ -v输出信息里有Target: x86_64-w64-mingw32就是64位版,如果是i686-w64-mingw32就是32位版。
第四步,检查qmake位置是否与编译器一致。Qt 5.9.9如果你安装的是32位库,那么qmake路径必须是32位库目录下的,不能把64位的qmake配给32位的编译器。这一步很多人会忽略,因为qmake能正常显示版本号,但实际生成的Makefile里链接参数全是按位数写死的,位数不匹配一定会出问题。
5.3 三分钟定位速查表
为了让你以后遇到同类报错更快定位,我整理了一张速查表:
| 症状 | 可能原因 | 修复方法 |
|---|---|---|
| 提示编译器无法生成代码 | 编译器与Qt版本不匹配 | 下载对应版本的MinGW |
| 提示g++、mingw32-make不是内部命令 | PATH未生效 | 重新配置环境变量并重开终端 |
| 链接阶段大量undefined reference | 位数不匹配 | 统一Qt库、编译器位数 |
| qmake未找到Qt版本 | Qt Version未配置 | 在Kits里手动添加qmake路径 |
| 解压后bin目录缺少文件 | 被杀毒软件拦截 | 恢复被隔离文件或重新解压 |
| Qt Creator不识别编译器 | 编译器类型选错 | 添加编译器时选择GCC类型而不是MSVC |
这张表我建议截图保存。很多报错看起来复杂,但对照着这一步一步查,基本三分钟内能定位问题。
6. 安装之后的几个收尾动作与我的经验总结
6.1 PATH里只保留一份MinGW
一个很容易被忽视的坑:如果你的电脑里之前装过其他软件(比如Python、Git、VMware等),它们可能自带或引入了另一个版本的MinGW。多个MinGW的bin目录同时出现在PATH里,会导致你在命令行敲gcc时,实际调用的是旧版本而不是你刚装的新版本。
判断方法是在cmd里输入:
where gcc如果输出多行路径,说明存在多个版本冲突。解决办法就是清理PATH,只保留你决定使用的那个bin目录。比如你刚才解压到D:\mingw64,那就把其他与MinGW相关的路径从PATH里删掉。
6.2 下载文件做SHA-256校验
这个方法是我后期才开始使用的,但真的能帮你避开很多暗坑。SourceForge或者镜像站在每个压缩包旁边都会提供一个.sha256校验文件。下载完压缩包后,用PowerShell执行一条命令就能校验文件完整性:
Get-FileHash D:\mingw64.zip -Algorithm SHA256把得到的哈希值和官方提供的比对,一致说明文件没有损坏,不一致就重新下载。这个操作对目录中个别文件损坏、压缩包本身被截断这类隐蔽问题非常有效,强烈建议在解压前执行。
6.3 最后分享一个个人经验
从最早在官网下载失败、被SourceForge假下载按钮骗,到后来学会用镜像站、用Qt安装器自带组件,我已经帮自己也帮别人处理过很多次MinGW的安装问题。现在我的固定流程是:先查当前Qt需要的MinGW版本号,然后直接去镜像站拉对应压缩包,解压后配置环境变量,最后在Qt Creator里手动注册编译器并验证一个空项目能跑通,整个过程不超过十分钟。
有一件事我特别想提醒你:以后遇到任何“MinGW下载失败”“编译报错无法解决”的情况,先别急着把MinGW删掉重装。先检查版本匹配、位数、PATH生效状态这三项,绝大多数问题都能快速解决。重装是最后的办法,不是第一选择。
工具链这种东西,一旦配置好可以一直用很多年。希望这篇内容能帮你跨过下载安装这道坎,把时间省下来真正用到写代码上。