简介:这是一份MinGW(Minimalist GNU for Windows)免安装版资源,面向需要在Windows下进行C/C++、Fortran等源码编译与调试的开发者,旨在免去传统安装流程,解压后即可获得GNU工具链的使用能力。压缩包内共13203个文件,约129.4MB,核心包括h/hpp头文件、a/lib静态库、exe可执行程序、dll动态链接库以及pyd/Python扩展模块等,同时覆盖GCC、GDB等工具链,可支撑从源码到生成可执行程序的完整流程。相比手动搭建环境,这份免安装包省去环境配置步骤,适合个人项目、教学实验及临时编译需求。资源包内还附带大量终端兼容描述文件与常用头文件目录,便于在Windows上模拟类Unix编译体验。目前已769人学习下载,适合刚开始接触GNU工具链或需要快速搭建Windows编译环境的开发者。 前阵子帮同事在一台刚拆封的 Windows 电脑上配 C/C++ 开发环境,他以为起码得装一个 Visual Studio,或者至少跑一遍安装向导。我没走那条路,从 U 盘里拖出一个 mingw 免安装版文件夹,解压,往 PATH 里追加一条路径,打开终端敲gcc --version,三分钟后 Hello World 已经打印出来了。他问我为什么能这么快,我说这不是什么魔法,而是 MinGW 这套 GNU 工具链从设计上就适合这样的用法——编译器、头文件、库文件全部收敛在一个目录里,安装器只是替你写注册表、改 PATH 而已,绕开这些步骤,它就回到"解压即用"的本性。
这篇文章写给这样几类人:不想在系统里留一堆注册表垃圾的洁癖型开发者;需要在多台电脑间来回切换、希望环境能随身携带的学生或兼职开发者;以及想把手头 Linux 下的 Makefile 工程搬到 Windows 上验证一下的嵌入式或后端工程师。我会从下载选包讲起,把免安装版 MinGW 从解压到接入编辑器再到排错的完整链路拆开说清楚。
1. 为什么我更爱绿色版:安装版在后台干的那些事
1.1 安装器替你做的事,恰恰是需要你掌握的事
传统的 MinGW 在线安装器或者 setup.exe 看起来省事,但它在背后做的事情不少:往注册表写入软件路径信息,把工具链目录追加到系统 PATH,可能还会向 System32 或 ProgramData 复制几个运行时 DLL,顺带创建开始菜单快捷方式。等你哪天不想用了,卸载程序往往删不干净,注册表里残留键值、PATH 里残留一条指向不存在的目录,这些"后遗症"在长期使用的机器上会慢慢积累。
MinGW 工具链的结构决定了它完全没必要这么做。GCC 在编译时通过自身的可执行文件位置来定位头文件、标准库和内部程序(比如cc1.exe),只要整个目录的相对关系不被破坏,它就能正常工作。这个特性让免安装版天然成立:把mingw64文件夹当成一个可以整体移动的"编译器容器",比安装到系统里更符合工具链本身的工作方式。
1.2 免安装版的三个实际价值
我这些年一直偏爱免安装版,主要是它带来三个实在的好处:
- 多版本共存:GCC 8、GCC 12、最新实验版可以分别放在不同目录里,想切换编译器只需要调整 PATH 的顺序,或者干脆在 Makefile 里指定完整路径,互不干扰。安装版想做到这一点,得折腾多个实例和配置,繁琐很多。
- 拷贝即迁移:把整个 MinGW 目录压成一个 zip,放到移动硬盘或网盘里,到了别的电脑上解压就能用。对经常在实验室、机房、客户现场之间走动的人来说,这就是随身携带的编译环境。
- 清理不留痕:免安装版卸载就是删除文件夹,系统里不残留任何环境变量或注册表项。对于"环境洁癖"用户来说,这是不可替代的体验。
当然,安装版也并非没有存在意义。CodeBlocks 的setup.exe发行包会把 IDE 和编译器装好,适合不想手动配置的新手;MSYS2 这类带包管理器的环境用安装器也更方便,因为它需要维护一套独立的软件包数据库。但如果你只是想拿到一个纯粹的 GCC/G++/GDB 工具链,免安装版是更合适的选择。
2. 下载渠道与版本选择:官网、WinLibs 与各种压缩包的区别
2.1 别再被"官网下载"四个字带到老站点
很多人搜索"mingw官网下载",第一个跳出来的可能还是mingw.org。这个老站点的项目已经停留在 32 位时代的节奏,开发更新很慢,并不适合今天的 64 位 Windows 环境。真正的主流是mingw-w64项目,它把 GNU 工具链完整移植到了 Windows,并支持 64 位目标架构。
不过 mingw-w64 的官方构建版本散落在不同维护者的发布页里,普通用户很难一下子找到最合适的那份。我常用的两个来源是:
- WinLibs:提供自行编译的 GCC for Windows,zip 格式,解压即用,页面里同时区分 UCRT runtime 和 msvcrt runtime 两个版本,说明清晰,下载后直接用
sha256校验一下即可。 - w64devkit:一个自包含的开发环境打包,不仅包含 MinGW-w64,还塞进了 make、vim 之类的小工具,同样免安装,适合追求"一个文件夹搞定一切"的场景。
还有一个容易被搜索引擎带到沟里的地方:某些论坛或网盘分享的"mingw 百度云"链接。我不太建议从这种渠道下载编译器,原因很简单——编译器是可以执行任意代码的高危工具链,一旦被植入恶意逻辑很难被察觉。官方发布页或 GitHub Releases 至少提供校验和,安全性要可靠得多。
提示:下载后第一件事,比对一下发布页给出的 SHA-256 校验值,这能过滤掉绝大多数传输过程中被篡改的情况。
2.2 版本组合怎么选:x86_64、i686、UCRT、msvcrt
我见过不少人下错版本,最常见的就是把x86_64-w64-mingw32和i686-w64-mingw32搞混。这两个前缀代表编译器生成的目标程序位数:
| 前缀 | 目标架构 | 输出程序 |
|---|---|---|
| x86_64-w64-mingw32 | 64 位 | x64 程序 |
| i686-w64-mingw32 | 32 位 | x86 程序 |
现代 Windows 10/11 基本都是 64 位系统,默认选x86_64-w64-mingw32没问题。但如果你要配合某些只提供 32 位二进制的第三方库,比如老的 freeglut 32 位版本,那就得换个思路:要么使用 32 位编译器,要么去下载 64 位版本的库。位数不匹配是后面最容易踩的坑,我放到最后一节细说。
另一个选择是 runtime 类型。WinLibs 等发布方一般提供两种:
- UCRT(Universal C Runtime):Windows 10 以后系统自带,新项目默认选它就好,头文件和库的兼容性更贴近现代 Windows。
- msvcrt:老式 C 运行库,兼容 Windows XP 时代的遗留程序,但新开发的库和工具已经开始逐步放弃它。
如果你不是在做老系统兼容,直接选 UCRT 版本,省心。
2.3 解压后的目录骨架到底装了什么
免安装版下载下来是个 zip,解压后会看到一个类似mingw64的根目录。里面几个关键子目录先认清楚:
| 目录 | 内容 | 说明 |
|---|---|---|
bin | gcc.exe、g++.exe、gdb.exe、mingw32-make.exe 等 | 所有可执行文件都在这里,PATH 要指到这个目录 |
include | C/C++ 标准库头文件、win32 API 头文件 | 编译器搜索头文件的默认路径之一 |
lib | lib*.a静态库和导入库 | GCC 链接时默认搜索的库路径之一 |
libexec | cc1.exe等内部程序 | GCC 的组成部分,一般不需要手动操作 |
share | 文档、语言包等辅助资源 | 不影响编译,但别随手删 |
x86_64-w64-mingw32 | 针对目标平台的系统库和头文件 | 有些发行版会在这里再放一套 sys-root |
认清这个结构后,很多路径配置就很好理解了。所谓的"免安装",本质上是把这个目录当成一个独立软件根,所有子目录的相对位置不能乱动,否则 GCC 就找不到自己的内脏了。
3. 解压、配 PATH、验证编译:三步让 GCC 在终端跑起来
3.1 PATH 配置我推荐的做法
环境变量的作用,是让 Windows 在任意目录下都能直接找到bin里的可执行文件。Windows 的环境变量分用户级和系统级两类,我建议改用户变量,不动系统变量,原因很简单:系统变量会影响这台电脑的所有账号,没必要为个人工具库搞那么大的动静。
图形界面操作路径是:设置 -> 系统 -> 关于 -> 高级系统设置 -> 环境变量 -> 在"用户变量"里找到 Path -> 新建 -> 填入你的mingw64\bin绝对路径。
命令行也可以直接写:
setx PATH "%PATH%;D:\tools\mingw64\bin"注意:
setx只对之后新开的终端生效,已经打开的终端窗口不会同步,配置完记得重开一个命令行。
有一点容易被忽略:如果你本来用的是 PowerShell,命令行环境变量改完后,当前会话依然读不到新值,必须重新启动终端。另外,setx会把整个 PATH 复制到用户变量里,如果 PATH 本来就很长,可能出现截断风险,手动图形界面反而更稳妥。
3.2 验证工具链的命令
配置完 PATH 后,打开新终端,依次执行下面四条命令,确认输出正常:
gcc --version g++ --version gdb --version mingw32-make --version只要能看到版本号而不是"不是内部或外部命令"之类提示,说明工具链已经找得到了。这里的mingw32-make对应 Linux 下的make,Windows 上它叫这个名字,目的是避免和 IDE 自带的 make 工具冲突。
如果gcc能运行但报缺少某个 DLL,比如libwinpthread-1.dll,那就是 PATH 虽然配了,但 DLL 搜索顺序没找到,具体解决思路放在后面避坑部分。
3.3 第一个 Hello World 与 Makefile 编译
工具链就绪后,写一个最简单不过的hello.c:
#include <stdio.h> int main(void) { printf("Hello from MinGW!\n"); return 0; }编译命令是:
gcc hello.c -o hello.exe ./hello.exe对于稍微复杂一点的项目,我更建议从一开始就写 Makefile,这样能在 Windows 和 Linux 之间保持一致的构建习惯:
hello.exe: hello.c gcc hello.c -o hello.exe clean: del hello.exe执行时用mingw32-make而不是make:
mingw32-make这一步跑通,说明免安装版 MinGW 已经完全可用。接下来要解决的是和编辑器、IDE 的配合问题。
4. 接 CodeBlocks 和 VS Code:免安装版和两大编辑器的对接细节
4.1 CodeBlocks 25.03 自带的 MinGW 与手动指定编译器路径
最近不少人在问 CodeBlocks 25.03 的发行包,尤其是那个codeblocks-25.03mingw-setup.exe。这个安装包的好处是 IDE 和 MinGW 编译器一起装好,开箱即用。它内置的 MinGW 本质上也是一个完整工具链目录,只是为了配合安装版 IDE 被放到了固定位置。
如果你已经用了我前面说的免安装版 MinGW,也可以让 CodeBlocks 直接指向它。打开 CodeBlocks 后,进入 Settings -> Compiler -> Global compiler settings,确认选中 GNU GCC Compiler,然后切到 Toolchain executables 标签页,把 Compiler's installation directory 手动改成免安装 MinGW 的根目录,比如D:\tools\mingw64。
这里有个细节:CodeBlocks 的自动检测并不总是可靠,尤其是在系统 PATH 里同时存在多个工具链的时候,自动检测可能猜错。手动指定路径后,一般还需要在下方确认gcc.exe、g++.exe、gdb.exe、mingw32-make.exe等文件名是否准确,保持默认名就行。配置完别忘了点 OK 保存,否则编译器选项不会生效。
4.2 VS Code 的 tasks.json 与 IntelliSense 配置
VS Code 这两年已经成为很多人写 C/C++ 的主要编辑器,但它本身不带编译器,需要靠外部工具链干活。在 VS Code 里用免安装版 MinGW,关键配置文件有两个。
第一个是.vscode/tasks.json,用来定义编译任务:
{ "version": "2.0.0", "tasks": [ { "label": "gcc build", "type": "shell", "command": "gcc", "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.exe"], "group": "build" } ] }编译时按Ctrl+Shift+B运行这个任务即可。第二个是.vscode/c_cpp_properties.json,用来告诉 IntelliSense 你的编译器路径和标准库头文件位置:
{ "configurations": [ { "name": "Win64", "includePath": ["${workspaceFolder}/**", "D:/tools/mingw64/include"], "compilerPath": "D:/tools/mingw64/bin/gcc.exe", "intelliSenseMode": "windows-gcc-x64", "cStandard": "c17", "cppStandard": "c++17" } ], "version": 4 }compilerPath必须指向具体的gcc.exe,而不是 MinGW 根目录;intelliSenseMode用windows-gcc-x64,这个设置决定了代码提示和分析器的行为。填错的话,VS Code 的智能提示可能时好时坏,但编译本身不受影响,所以很多人会忽略这个文件,直到发现头文件爆红才回头来补。
4.3 freeglut 这类第三方库的两种接法
现在很多图形学课程还在用 freeglut,而热词里出现的"freeglut mingw 32位版本"说明不少人卡在了第三方库的接入上。第三方库和免安装版 MinGW 搭配,通常有两种接法。
第一种是直接把库的include和lib内容复制到 MinGW 对应的include和lib目录里。优点是编译时不用加额外参数,缺点是污染了工具链目录,哪天想换库版本容易混乱。
第二种是把库放在独立目录,编译时通过参数指定。假设你下载的 freeglut 解压到了D:\libs\freeglut,编译命令可以写成:
gcc main.c -o demo.exe -ID:/libs/freeglut/include -LD:/libs/freeglut/lib -lfreeglut -lopengl32-I是增加头文件搜索路径,-L是增加库文件搜索路径,-lfreeglut是让链接器去找libfreeglut.a或者freeglut.dll对应的导入库。
注意:freeglut 的下载页面如果明确写的是 32 位版本,那对应的编译器和链接器也必须是 32 位,也就是
i686-w64-mingw32那一套。拿 64 位编译器去链 32 位库,会出现链接错误,这个坑我下面单独说。
5. 免安装版最常见的坑与一次"移动编译环境"的收尾
5.1 解压后提示缺少 libwinpthread-1.dll
这个报错我在新机器上见过很多次,现象是明明把gcc目录配进 PATH 了,一运行却提示找不到libwinpthread-1.dll或libgcc_s_seh-1.dll。
原因很简单:MinGW 的工具链可执行文件本身依赖bin目录下的一堆运行时 DLL,Windows 加载程序在启动进程时按一定顺序搜索 DLL,包括 exe 所在目录、系统目录、当前目录和 PATH 目录。如果你的 PATH 没有包含mingw64\bin,或者 PATH 中有多个 MinGW 导致搜到了错版本,就会触发这个报错。
解决办法分两层。一是确认 PATH 里确实有mingw64\bin,并且只有这一个 MinGW 实例,避免新旧版本 DLL 打架;二是如果你只是想临时给一个测试 exe 用,也可以把缺的 DLL 复制到 exe 旁边,但不建议长期这么干,会破坏免安装版的整洁性。
5.2 64 位编译器碰 32 位库:file format not recognized
这个坑和 freeglut 32 位版本结合得特别紧密。你下载了一个 32 位的libfreeglut.a,却用x86_64-w64-mingw32的 gcc 去链接,链接器通常会报:file format not recognized,或者干脆出现一堆undefined reference错误。
本质原因是 64 位工具链只能消费 64 位的 COFF 目标文件和导入库,32 位库的二进制格式完全不匹配,编译器根本读不懂。写代码时要注意,不只是 freeglut,任何第三方库都要先确认目标和编译器的位数一致。如果你坚持要用 32 位的库,就去下载i686-w64-mingw32版的免安装 MinGW,两套工具链可以共存,从文件名或者目录名区分即可。
5.3 Visual Studio 2022 和 MinGW:不是替代,是并存
热搜词里有一条"vs 2022进行mingw编译",我估计很多人是在 Visual Studio 2022 或 VS Code 这两个容易混的名词之间打转。先说结论:Visual Studio 2022 是完整 IDE,它自带的 MSVC 编译器(cl.exe)和 MinGW 的 GCC 是两套独立的工具链,生成的 ABI 不通用,不能把 MSBuild 项目的编译器直接替换成 gcc 来编译。
但"在 VS2022 环境下使用 MinGW"这件事是可行的,前提是把它当作外部命令行工具来用。你可以在普通 PowerShell 里把mingw64\bin加入 PATH,然后直接执行gcc;也可以在 Visual Studio 的 Developer PowerShell 里调用同一个 gcc,只要你知道自己在做什么。VS Code 则完全是另一个层面的事情——它只是编辑器,通过tasks.json调用外部编译器,所以免安装版 MinGW 在 VS Code 里的体验反而比在 VS2022 里更顺滑。
5.4 把整个目录做成"移动编译环境"
最后分享一个我用了很多年的小技巧:在 MinGW 根目录放一个setenv.bat,每次换新机器解压完,双击它就能重新写入用户 PATH,免得每次手动改系统设置。
@echo off set "MINGW_BIN=%~dp0bin" setx PATH "%PATH%;%MINGW_BIN%" echo MinGW bin has been written to user PATH. echo Please open a new terminal and run "gcc --version" to verify. pause这个脚本利用了%~dp0获取当前 bat 文件所在目录,把它转换成一个绝对路径写入 PATH。简单场景下足够用,唯一需要注意的是setx有 1024 字符的写入长度限制,如果你 PATH 本身就特别长,建议手动处理。每次在 U 盘或网盘里调整完工具链,我会把整个文件夹重新压缩成带版本号的 zip,比如mingw-w64-ucrt-x86_64-202504.7z,到了新机器上解压、跑一次脚本、验证版本号,一套环境一分钟内就能就位。
免安装版 MinGW 看起来只是省掉了安装向导,实际上改变的是你管理开发环境的方式。编译器变成普通软件目录,版本切换、环境迁移、故障清理都变得简单可控。如果你还在为多台电脑的 C/C++ 环境折腾,不妨也试试这条路——从下载一个 zip 开始,你会发现"直接解压就能使用"从来不是将就,而是一种更清醒的选择。
本文还有配套的精品资源,点击获取