Skip to content

MinGW-w64 安装教程(niXman 构建版)

本文以 niXman/mingw-builds-binaries 发布的 x86_64-16.1.0-release-win32-seh-ucrt-rt_v14-rev1.7z 为例,讲解下载、安装与环境变量配置。该构建是一个**免安装(解压即用)**的绿色包,不需要跑安装向导。

参考来源:


一、下载安装包

打开 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-sehmsvcrti686(32 位)等多种变体。本文选的是 64 位 + win32 线程 + SEH 异常 + UCRT 运行时的组合,对 Windows 原生 C/C++ 开发最常用、最推荐。


二、软件包命名逐段解释(重点)

文件名 x86_64-16.1.0-release-win32-seh-ucrt-rt_v14-rev1.7z 每一段都代表一个构建选项:

字段示例值含义
x86_64x86_64 / i686目标架构x86_64 = 64 位,i686 = 32 位
16.1.016.1.0GCC 编译器版本号(这里是 GCC 16.1.0,相当新)
releaserelease / debug构建类型release 为发布优化版(非调试)
win32win32 / posix / mcf线程模型:见下方说明
sehseh / sjlj / dwarf异常处理机制:见下方重点说明
ucrtucrt / msvcrtC 运行时库:见下方重点说明
rt_v14rt_v14MinGW-w64 API/CRT 版本(v14)
rev1rev0 / rev1修订号:同一 GCC 版本下的小修订

🔑 SEH 代表什么?

SEH = Structured Exception Handling(结构化异常处理),是 Windows 原生的异常处理机制。

  • 64 位 MinGW-w64 上,seh推荐的异常处理模型:它基于 Windows 系统的原生异常框架,性能更好、开销更小,且不需要额外的运行时依赖。
  • 它的替代方案是 sjlj(setjmp/longjmp):兼容性强(可跨 32/64 位),但性能较差、有调用开销,且异常捕获范围有限。
  • 注意一个约定:64 位通常用 seh32 位通常用 dwarf(DWARF 是 32 位下的高效方案,32 位不用 seh)。

一句话:SEH 是 Windows 原生的异常处理方式,64 位下性能最优,是默认首选。

🔑 UCRT 代表什么?

UCRT = Universal C Runtime(通用 C 运行时),是微软自 Windows 10 起提供的现代 C 运行时(系统自带 ucrtbase.dll)。

  • 它是传统 MSVCRTmsvcrt.dll,老旧且标准兼容性差的 C 运行时)的现代替代品
  • 优点:
    1. 标准兼容性更好:对 C99 / C11 的支持比老旧的 MSVCRT 完整得多(如 snprintfstdio 行为更规范)。
    2. 与 MSVC 一致:现代 Visual Studio 默认就用 UCRT,用 UCRT 构建的程序与 MSVC 生态兼容性最佳。
    3. 系统级组件:UCRT 是 Windows 系统的一部分,无需随程序额外打包旧的运行时 DLL。
  • 相比之下,msvcrt 构建链接的是古老的 msvcrt.dll,标准支持弱、行为过时,仅用于需要兼容极老环境的场景。

一句话:UCRT 是微软的现代 C 运行时,标准兼容好、与 MSVC 一致,新项目应优先选 ucrt 而非 msvcrt

附:线程模型 win32 vs posix

  • win32:使用 Windows 原生线程 API,无额外 pthread 依赖,纯 Windows 开发最常用、最轻量。现代 MinGW-w64 已能在 win32 模型下支持 C++11 std::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++ 标准支持良好。


五、常见问题排查

  1. gcc 不是内部或外部命令 99% 是环境变量没配对。检查 Path 里是否包含正确的 mingw64\bin 路径;确认路径没有多余空格或引号;改完 PATH 后必须重新打开终端。

  2. IDE 找不到编译器 在 VS Code 等 IDE 中,可能需要在配置里手动指定编译器路径,例如在 c_cpp_properties.json 设置:

    json
    "compilerPath": "C:\\Program Files\\mingw64\\bin\\gcc.exe"
  3. 需要额外库 如果项目依赖某些第三方库,可考虑通过 MSYS2 的包管理器安装,或用 vcpkg / conan 等管理;这属于另一话题,可按需另查。


六、记忆要点

MinGW-w64(niXman 版)= 解压即用的绿色 GCC 工具链;下载 .7z → 解压到无中文/空格路径 → 把 bin 加进系统 Pathgcc --version 验证。命名记住三件事:x86_64 是 64 位、seh 是 Windows 原生高效异常处理(64 位首选)、ucrt 是现代 C 运行时(优于老旧的 msvcrt)。

最近更新