简介:MinGW for Win64 是面向 Windows 64 位平台的 GCC 编译器工具链资源,适合在本地学习 C++、希望摆脱大型 IDE 依赖的开发者与编程初学者。它提供 GCC、libstdc++、Binutils、Make 及配套头文件与库,支持 C++11/14/17 标准及部分 C++20 特性,可命令行快速编译调试,资源占用小、启动快,编译产物跨平台兼容性较好。压缩包为 zip 格式,大小约 156.05MB,文件总数与类型明细上游暂未提供,从描述看应包含 TDM-GCC-64 工具链的可执行文件、头文件与静态动态库等核心组件。目前已有 115 人学习下载,适合想理解编译流程、搭建轻量级 C++ 开发环境的读者参考使用。
1. MinGW for Win64 安装环境搭建:从零跑通第一个 C++ 程序
很多人第一次在 Windows 上写 C++,卡住的不是语法,而是连g++都敲不出来。MinGW for Win64 就是解决这个问题的:它把 GCC 工具链搬到 Windows 64 位环境,让你不装 Visual Studio 也能编译 C++。听起来简单,但版本选错、路径带空格、环境变量顺序不对,都会让g++ --version直接报“不是内部或外部命令”。我见过太多人在这卡一下午,最后放弃转去装几个 G 的 IDE。这篇记录的是我反复装过多次、能稳定跑通的一套流程,适合刚接触 C++ 的新手,也适合想换轻量工具链的老手。
2. 下载与版本选择:MinGW for Win64 到底该拿哪个包
2.1 先分清 MinGW-w64 和旧版 MinGW
网上搜“MinGW 下载”,出来的结果很杂。这里要分清两个东西:老 MinGW 项目早就停止更新,只支持 32 位,很多新库根本编不过;现在实际用的是 MinGW-w64,它同时支持 32 位和 64 位,维护活跃。你装的时候认准 MinGW-w64 这个名字,别下成旧版。常见做法是去 SourceForge 上的 MinGW-w64 页面,或者用 MSYS2 来管理。我一般直接下独立压缩包,解压就能用,不写注册表,卸载就是删文件夹,干净。
2.2 三个关键参数:架构、线程模型、异常模型
下载页会让你选几个参数,选错不一定立刻报错,但后面链接第三方库时会出玄学问题。对照下面这张表选:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 架构 | x86_64 | 64 位系统就选这个 |
| 线程模型 | posix | 用 std::thread 必须选 posix,win32 不支持 C++11 线程 |
| 异常模型 | seh | 64 位下 seh 性能好,且能配合 posix 线程 |
| 版本 | 最新稳定版 | 别追太新的构建,选发布有一段时间的 |
线程模型这里踩过坑:早期我选了 win32,结果一用std::thread就编译报错,换成 posix 才过。异常模型在 64 位下基本无脑 seh,sjlj 是给 32 位兜底的。
2.3 下载与解压路径的讲究
下载下来通常是个.7z或.zip,解压到哪很重要。我一般放C:\mingw64,路径短、无空格、无中文。千万别解压到“桌面”或者“Program Files”,前者路径里有中文用户名,后者有空格,后面配环境变量和 Makefile 时全是坑。解压完目录结构应该是C:\mingw64\bin、C:\mingw64\lib、C:\mingw64\include这样。如果解压出来多套了一层文件夹,把里层内容挪到C:\mingw64下,保证bin直接可见。
# 解压后确认目录结构,Windows 下用 dir 或资源管理器看 C:\mingw64\bin\g++.exe C:\mingw64\bin\gcc.exe C:\mingw64\bin\mingw32-make.exe这三个文件在,说明包没下错。g++编 C++,gcc编 C,mingw32-make是 make 的 Windows 版,名字虽然带 32 但 64 位也能用。
3. 配置环境变量:让 g++ 在任何目录都能敲出来
3.1 把 bin 目录加进 PATH
解压完直接开 CMD 敲g++是没反应的,因为系统不知道去哪找。要把C:\mingw64\bin加到 PATH 里。步骤:此电脑右键 → 属性 → 高级系统设置 → 环境变量 → 在“系统变量”里找到 Path → 编辑 → 新建 → 填C:\mingw64\bin→ 一路确定。注意是加到“系统变量”的 Path,不是“用户变量”,否则换个账户又没了。加完必须重开 CMD,旧窗口读的是旧环境。
# 重开 CMD 后验证 g++ --version # 正常输出类似: # g++ (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0版本号后面的x86_64-posix-seh正好对应你下载时选的参数,对上了就说明装对了。
3.2 PATH 顺序引发的版本冲突
如果你电脑里之前装过别的编译器,比如 Dev-C++ 自带的旧 GCC,或者 Anaconda 里的gcc,PATH 里可能有好几个g++。系统按 PATH 顺序找,先找到哪个用哪个。我遇到过敲g++ --version出来是 4.9 的老版本,查半天才发现 Anaconda 的路径排在前面。解决办法:把C:\mingw64\bin上移到最前面,或者把冲突的路径删掉。用where g++能看到所有命中的路径,排查时很有用。
where g++ # 输出可能有多行,第一行才是实际生效的 C:\mingw64\bin\g++.exe C:\Users\xxx\Anaconda3\Library\mingw-w64\bin\g++.exe3.3 验证环境变量是否真的生效
配完别急着写代码,先做三步验证:g++ --version看版本,gcc --version看 C 编译器,mingw32-make --version看 make。三个都出东西,环境才算通。如果g++有反应但mingw32-make没有,说明 bin 目录没加全,或者 make 文件名不对——有些包叫make.exe而不是mingw32-make.exe,去 bin 目录里看一眼实际叫什么。
提示:改完环境变量一定要新开终端窗口,在旧窗口里怎么试都是旧配置,这个坑我踩过不止一次。
4. 编译第一个程序:从源码到可执行文件的完整链路
4.1 写一个最小 C++ 文件
找个干净目录,比如D:\cpptest,新建hello.cpp。内容别贪多,先跑通再说:
// hello.cpp #include <iostream> int main() { std::cout << "MinGW for Win64 works!" << std::endl; return 0; }#include <iostream>是标准输入输出头,std::cout往控制台打东西。这段代码不依赖任何第三方库,能编过就说明工具链基本正常。
4.2 用 g++ 编译并运行
在D:\cpptest下开 CMD,敲:
g++ hello.cpp -o hello.exe # 没报错就生成了 hello.exe hello.exe # 输出:MinGW for Win64 works!-o hello.exe指定输出文件名,不写的话 Windows 下默认生成a.exe。编译过程分四步:预处理、编译、汇编、链接,g++一条命令全干了。如果报iostream: No such file or directory,说明 include 路径没配好,多半是包下错了或者解压不完整。
4.3 加上编译参数看细节
实际项目里不会只敲g++ hello.cpp,常用参数得知道几个:
g++ hello.cpp -o hello.exe -std=c++17 -Wall -O2 -g-std=c++17:指定 C++ 标准,不写的话老版本 GCC 默认可能是 C++14 甚至更早-Wall:打开常用警告,能提前发现隐患-O2:开二级优化,发布时用-g:保留调试信息,配合 gdb 用
这几个参数组合是我日常编译的默认起手式。-std一定要显式写,不同 GCC 版本默认标准不一样,换台机器就可能编不过。
4.4 多文件编译与 make 的引入
单文件直接g++没问题,文件一多就得用 make。MinGW 自带的是mingw32-make,写个最简单的 Makefile:
# Makefile CXX = g++ CXXFLAGS = -std=c++17 -Wall -O2 TARGET = app.exe OBJS = main.o util.o $(TARGET): $(OBJS) $(CXX) $(OBJS) -o $(TARGET) %.o: %.cpp $(CXX) $(CXXFLAGS) -c $< -o $@ clean: del $(OBJS) $(TARGET)注意 Makefile 里命令行前面必须是 Tab,不是空格,这是新手最常翻车的地方。mingw32-make执行时如果报missing separator,九成是 Tab 变成了空格。运行mingw32-make就能按规则编译,mingw32-make clean清理产物。
5. 避坑与排查:MinGW for Win64 装完常见的五个翻车现场
5.1 现象:g++ 不是内部或外部命令
原因:PATH 没配,或者配了没重开终端,或者加到了用户变量但当前用的是另一个账户。解决:where g++看有没有命中,没有就回去检查 PATH;有命中但版本不对,调整 PATH 顺序。我一般把C:\mingw64\bin放 PATH 最前面,避免被其他工具链截胡。
5.2 现象:编译报 undefined reference tostd::thread::...
原因:下载时线程模型选了 win32,win32 模型不支持 C++11 线程。解决:换 posix 线程模型的包重新解压。这个错误不会在编译阶段出现,而是链接阶段才报,很多人以为是代码问题,其实是包选错了。判断方法:g++ -v看输出里的Thread model字段。
5.3 现象:中文输出乱码
原因:Windows 控制台默认 GBK 编码,源码文件如果是 UTF-8,输出中文就乱。解决:要么源码存成 GBK,要么在程序里用SetConsoleOutputCP(65001)切 UTF-8,要么编译时加-fexec-charset=GBK。我一般统一源码 UTF-8,程序开头加一行切码页,跨平台也省心。
5.4 现象:mingw32-make 报 missing separator
原因:Makefile 里命令行缩进用了空格而不是 Tab。解决:编辑器里把 Tab 显示出来,确保每条命令前是真正的 Tab。VS Code 右下角可以切缩进类型,改成 Tab 再存。这个坑几乎每个写 Makefile 的人都踩过。
5.5 现象:链接第三方库时报 cannot find -lxxx
原因:库文件不在默认搜索路径,或者库名写错。解决:用-L指定库目录,-I指定头文件目录。比如链接一个放在D:\libs的库:g++ main.cpp -ID:\libs\include -LD:\libs\lib -lmylib -o app.exe。注意-l后面跟的是库名去掉lib前缀和.a/.dll后缀的部分。
6. 装完怎么验证:一套可复现的检查清单
装完别急着写业务代码,先按下面这套流程走一遍,全过才算环境真的稳。这套检查我每次换机器都跑,能提前暴露九成配置问题。
第一步,开新 CMD,依次敲:
g++ --version gcc --version mingw32-make --version where g++四条命令都要有正常输出,where g++的第一行必须是C:\mingw64\bin\g++.exe。如果版本号里的线程模型不是 posix,后面用线程会出问题,趁早换包。
第二步,编译一个带线程和 STL 的测试程序,验证工具链完整性:
// test_env.cpp #include <iostream> #include <thread> #include <vector> #include <algorithm> int main() { std::vector<int> v = {3, 1, 4, 1, 5}; std::sort(v.begin(), v.end()); std::thread t([&]{ for (int n : v) std::cout << n << " "; }); t.join(); std::cout << "\nthread + stl ok" << std::endl; return 0; }编译命令:
g++ test_env.cpp -o test_env.exe -std=c++17 -Wall -pthread test_env.exe-pthread在 MinGW 下有时可省,但显式加上更保险。能输出排序结果和thread + stl ok,说明线程模型、STL、链接都没问题。
第三步,用 make 走一遍多文件构建,确认mingw32-make和 Makefile 配合正常。随便建两个 cpp 加一个头文件,写个 Makefile,跑mingw32-make和mingw32-make clean,看产物生成和清理是否都正常。
第四步,检查 gdb 能不能用。MinGW 包里通常带gdb.exe,敲gdb --version看有没有。有的话编译时加-g,然后gdb test_env.exe进去run一下,能跑起来就说明调试链路通。
| 检查项 | 命令 | 通过标准 |
|---|---|---|
| 编译器 | g++ --version | 版本号含 x86_64-posix-seh |
| C 编译器 | gcc --version | 同上 |
| make | mingw32-make --version | 有版本输出 |
| 路径 | where g++ | 第一行指向 C:\mingw64\bin |
| 线程 | 编译 test_env.cpp | 运行输出 thread + stl ok |
| 调试 | gdb --version | 有版本输出 |
这套清单跑完,基本能确定环境是干净的。从那以后我每次装完 MinGW for Win64,都强制走一遍这四步,不再凭感觉“应该能用了”。希望帮到你。
本文还有配套的精品资源,点击获取