Appearance
MinGW-w64 安装教程(niXman 构建版)
本文以
niXman/mingw-builds-binaries发布的 x86_64-16.1.0-release-win32-seh-ucrt-rt_v14-rev1.7z 为例,讲解下载、安装与环境变量配置。该构建是一个**免安装(解压即用)**的绿色包,不需要跑安装向导。参考来源:
- 下载站:https://github.com/niXman/mingw-builds-binaries/releases
- 安装步骤参考:微信文章《MinGW-w64最新版本安装教程与实用指南》
一、下载安装包
打开 Releases 页面:
https://github.com/niXman/mingw-builds-binaries/releases在最新版本 16.1.0-rt_v14-rev1 的 Assets 列表中找到并下载:
x86_64-16.1.0-release-win32-seh-ucrt-rt_v14-rev1.7z- 文件大小:约 102 MB
- 上传时间:2026-05-25
- SHA256(用于校验完整性,可选):
12d9b93100aa092831fa7931c57e58ec86946b1587907d20e2db81928c32a98a
提示:该仓库还有
posix-seh、msvcrt、i686(32 位)等多种变体。本文选的是 64 位 + win32 线程 + SEH 异常 + UCRT 运行时的组合,对 Windows 原生 C/C++ 开发最常用、最推荐。
二、软件包命名逐段解释(重点)
文件名 x86_64-16.1.0-release-win32-seh-ucrt-rt_v14-rev1.7z 每一段都代表一个构建选项:
| 字段 | 示例值 | 含义 |
|---|---|---|
x86_64 | x86_64 / i686 | 目标架构:x86_64 = 64 位,i686 = 32 位 |
16.1.0 | 16.1.0 | GCC 编译器版本号(这里是 GCC 16.1.0,相当新) |
release | release / debug | 构建类型:release 为发布优化版(非调试) |
win32 | win32 / posix / mcf | 线程模型:见下方说明 |
seh | seh / sjlj / dwarf | 异常处理机制:见下方重点说明 |
ucrt | ucrt / msvcrt | C 运行时库:见下方重点说明 |
rt_v14 | rt_v14 | MinGW-w64 API/CRT 版本(v14) |
rev1 | rev0 / rev1 | 修订号:同一 GCC 版本下的小修订 |
🔑 SEH 代表什么?
SEH = Structured Exception Handling(结构化异常处理),是 Windows 原生的异常处理机制。
- 在 64 位 MinGW-w64 上,
seh是推荐的异常处理模型:它基于 Windows 系统的原生异常框架,性能更好、开销更小,且不需要额外的运行时依赖。 - 它的替代方案是
sjlj(setjmp/longjmp):兼容性强(可跨 32/64 位),但性能较差、有调用开销,且异常捕获范围有限。 - 注意一个约定:64 位通常用
seh,32 位通常用dwarf(DWARF 是 32 位下的高效方案,32 位不用 seh)。
一句话:SEH 是 Windows 原生的异常处理方式,64 位下性能最优,是默认首选。
🔑 UCRT 代表什么?
UCRT = Universal C Runtime(通用 C 运行时),是微软自 Windows 10 起提供的现代 C 运行时(系统自带 ucrtbase.dll)。
- 它是传统 MSVCRT(
msvcrt.dll,老旧且标准兼容性差的 C 运行时)的现代替代品。 - 优点:
- 标准兼容性更好:对 C99 / C11 的支持比老旧的 MSVCRT 完整得多(如
snprintf、stdio行为更规范)。 - 与 MSVC 一致:现代 Visual Studio 默认就用 UCRT,用 UCRT 构建的程序与 MSVC 生态兼容性最佳。
- 系统级组件:UCRT 是 Windows 系统的一部分,无需随程序额外打包旧的运行时 DLL。
- 标准兼容性更好:对 C99 / C11 的支持比老旧的 MSVCRT 完整得多(如
- 相比之下,
msvcrt构建链接的是古老的msvcrt.dll,标准支持弱、行为过时,仅用于需要兼容极老环境的场景。
一句话:UCRT 是微软的现代 C 运行时,标准兼容好、与 MSVC 一致,新项目应优先选
ucrt而非msvcrt。
附:线程模型 win32 vs posix
win32:使用 Windows 原生线程 API,无额外 pthread 依赖,纯 Windows 开发最常用、最轻量。现代 MinGW-w64 已能在win32模型下支持 C++11std::thread,因此一般直接用win32即可。posix:使用 pthread(POSIX 线程),对需要 pthread 语义或某些跨平台库的场合更合适,但会引入额外的 pthread 依赖。
三、安装步骤(解压 + 配置环境变量)
MinGW-w64 是绿色解压版,没有安装程序,全过程就是「解压 → 加 PATH」。
① 解压到本地目录
下载得到的 .7z 需要先用解压软件(如 7-Zip、Bandizip)解压。建议解压到一个不含中文、不含空格的路径,例如:
C:\Program Files\mingw64也可解压到任意你喜欢的位置(如
D:\Tools\mingw64)。注意路径里不要有中文和空格,以免某些工具链解析出错。
解压后会得到一个 mingw64 文件夹,进入后能看到一个 bin 目录。
② 复制 bin 目录路径
进入 mingw64\bin,复制该目录的完整路径,例如:
C:\Program Files\mingw64\bin这个路径下一步要加到环境变量里。
③ 打开系统环境变量设置
在 Windows 搜索栏输入 「环境变量」,点击「编辑系统环境变量」→ 在弹出的「系统属性」窗口中点击「环境变量」按钮。
④ 编辑 Path 变量
在「系统变量」区域找到 Path,选中后点击「编辑」→「新建」→ 把刚才复制的 bin 目录路径粘贴进去 → 一路点击「确定」保存。
C:\Program Files\mingw64\bin⑤ 完成
没有安装向导、没有注册表写入——到这一步,MinGW-w64 就「安装」好了。
四、验证安装是否成功
打开新的命令提示符(CMD)或 PowerShell(务必是新开的,否则 PATH 不生效),输入:
shell
gcc --version
g++ --version若正确输出 GCC / G++ 的版本信息(应显示 16.1.0),说明安装成功。
如果提示「
gcc不是内部或外部命令」,说明 PATH 没配好(见下方排错)。
进阶验证:测试 C++20 新特性
新建一个 test_ranges.cpp:
cpp
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> nums = {10, 20, 30, 40, 50};
auto it = std::ranges::find(nums, 30);
if (it != nums.end()) {
std::cout << "Found: " << *it << std::endl;
} else {
std::cout << "Not found!" << std::endl;
}
return 0;
}编译并运行:
shell
g++ -std=c++20 test_ranges.cpp -o test_ranges
test_ranges.exe预期输出 Found: 30,说明新版本编译器对现代 C++ 标准支持良好。
五、常见问题排查
gcc不是内部或外部命令 99% 是环境变量没配对。检查Path里是否包含正确的mingw64\bin路径;确认路径没有多余空格或引号;改完 PATH 后必须重新打开终端。IDE 找不到编译器 在 VS Code 等 IDE 中,可能需要在配置里手动指定编译器路径,例如在
c_cpp_properties.json设置:json"compilerPath": "C:\\Program Files\\mingw64\\bin\\gcc.exe"需要额外库 如果项目依赖某些第三方库,可考虑通过 MSYS2 的包管理器安装,或用 vcpkg / conan 等管理;这属于另一话题,可按需另查。
六、记忆要点
MinGW-w64(niXman 版)= 解压即用的绿色 GCC 工具链;下载
.7z→ 解压到无中文/空格路径 → 把bin加进系统Path→gcc --version验证。命名记住三件事:x86_64是 64 位、seh是 Windows 原生高效异常处理(64 位首选)、ucrt是现代 C 运行时(优于老旧的msvcrt)。