简介面向Windows 10 64位开发者的MinGW安装包版本为V14.12.0集成了完整的GCC编译链。它能够让开发者在Windows系统中编译运行C、C等语言编写的类Unix程序适合需要搭建跨平台编译环境、学习编译原理或维护开源项目的用户使用。该版本针对64位环境优化相比早期版本具有更好的兼容性和稳定性。资源共包含2000个文件其中以C/C头文件为主另有大量Python脚本以及少量文本说明、Shell脚本和C源文件便于开发者查阅函数声明、运行辅助脚本或参考配置流程整个压缩包采用7z格式大小约79.98MB。目前已有363人学习下载。包内提供的工具链涵盖预处理器、编译器、汇编器和链接器配合作者发表的CSDN安装配置教程能够快速完成环境变量配置和组件选择同时附带的Python脚本可协助自动化处理构建任务避免因依赖缺失或路径设置错误而反复排查为后续开发工作奠定稳定基础。1. 为什么我在 Windows 10 上装的是 MinGW V14.12.0做 C/C 开发的朋友应该都有体会Windows 下写代码最绕不开的一个选择就是编译器。很多人刚入门时习惯用集成开发环境比如 Code::Blocks、Dev-C自带的编译器没在意背后到底是什么。但一旦要自己搭构建环境、用 CMake 管理工程、或者跑一些只在 Linux 上能用的开源项目编译器选型的差距立刻就出来了。MinGWMinimalist GNU for Windows是我在 Windows 10 上做原生 C/C 开发的主力编译器。它本质上是把 GNU 编译器套件GCC从 Linux/Unix 世界移植到 Windows生成的可执行文件不依赖额外的解释器或运行时环境直接跑。这里说的安装包是 MinGW-w64 项目提供的 Windows 10 64 位版本具体编译器版本对应 GCC 14.12.0属于现阶段相当新的工具链。适合谁来装这版如果你满足下面任一情况可以直接参考我的安装流程在 Windows 上编译 GNU 系开源项目需要与 Linux 服务器保持一致的工具链用 VS Code 或纯命令行写 C/C不想被 Visual Studio 的重量级工程文件绑死使用 CMake MinGW Makefiles 或 Ninja 构建跨平台项目给 Code::Blocks、CLion 等 IDE 配备自带之外的独立编译器这篇文章我会从 MinGW 的版本和位数的区别讲起说明为什么选 v14.12.0 的 64 位版本再给出完整的下载安装环境变量配置步骤最后把我踩过的坑和排查思路整理成速查表。这类内容在官方文档里大多散落在 FAQ 和论坛帖子中我尽量用自己的实测记录帮你把坑填平。2. MinGW 版本与工具链选择2.1 MinGW 和 MinGW-w64 到底有什么区别老牌的 MinGW 项目停更了很多年它只支持生成 32 位程序而如今 Windows 10 的 64 位系统已经成为绝对主流很多第三方库也只编译 64 位版本。所以现在大家说“装 MinGW”实际上装的几乎都是 MinGW-w64——它是从原项目分支出来的社区维护版本同时支持 32 位和 64 位可执行文件而且持续跟进最新的 GCC。V14.12.0 就是这个 MinGW-w64 项目里使用的 GCC 版本号并不是 MinGW-w64 自身的版本。GCC 14 系列带来的改进相当明显C 标准库libstdc对 C23 特性的支持更完善编译时的诊断信息更可读向量化优化能力也有提升。如果你时不时要编译一些现代 C 项目不要太老的工具链会省掉很多语法兼容的麻烦。很多人分不清 MinGW 和 MSVC 的关系我打个比方MSVC 是 Windows 原住民跟 Visual Studio、Windows SDK 深度绑定调试体验好但换到 Linux 上就得全部重来MinGW 更像是 Linux 上的编译器搬到 Windows同一个代码库两边都能编构建脚本也好迁移。它的短板是不能直接用 Windows 上特有的某些 API 和 MSVC 的 .lib 库碰到这种情况通常需要找对应源代码自己编。2.2 64 位版本和 32 位版本怎么选我这台机器是 Windows 10 64 位系统所以装的自然是最常见的 x86_6464 位工具链。选择 64 位版本的直接理由是内存寻址空间和性能64 位程序可以使用超过 4GB 的内存编译大型项目时耗时更短运行时寄存器数量也多一些。现在开源社区的预编译库几乎清一色提供 64 位版选 64 位不用跟第三方库较劲。不过 32 位版工具箱并没有完全淘汰。如果你需要维护老项目或目标机器还是 32 位 Windows那就需要安装 i686 版本。值得留意的是MinGW-w64 在安装时会同时提供多种配置选项下载前最好确认自己到底需要哪一种避免装了之后发现文件格式不对。2.3 线程模型和异常处理模型这两个参数不能被忽略MinGW-w64 在选择具体编译器版本时还有两个隐藏但关键的参数线程模型Threads和异常处理模型Exception。这也是新手最容易装错的地方。线程模型有 posix 和 win32 两种。posix 版本带了 pthread 支持如果你用 C11 的 std::thread 或者项目里依赖 pcpp 教学项目那样的 pthread 接口一定要选 posix。win32 版本不依赖 pthread但某些 C 标准库多线程特性会缺失。异常处理机制64 位下主要有 seh 和 sjlj。sehStructured Exception Handling是 Windows 原生的异常处理方式性能更好sjljSetjmp/Longjmp兼容性更广但稍慢。新装环境建议直接选 seh除非有特殊兼容需求。我见过好几个人装了之后编译老工程报一堆“thread not declared”十有八九就是选了 win32 线程模型的版本。编译一个测试程序直接换 posix 版本安装重来比在代码里绕半天快得多。3. 下载与安装从压缩包到命令行可用的完整流程3.1 下载方式选择在线安装器与离线压缩包MinGW 的官方下载渠道主要提供两类文件在线安装器即 w64devkit 或 MinGW-w64 安装器和压缩包。在线安装器更像一个有图形界面的包管理工具下载起来体积小但它要联网实时拉取文件网络不好时容易卡很久。压缩包则是已经打好包的完整工具链直接解压即可用。如果你需要在多台机器上配环境我强烈建议选离线压缩包。下载一次之后拷贝到 U 盘里到别的机器上解压就能用完全不依赖网络。V14.12.0 的 GitHub release 页面上通常会将压缩包按不同的编译器版本、线程模型和异常模型分门别类文件名里会带 x86_64-win32-seh 这样的标识下载时要看准。这里必须强调一句网络上很多非官方渠道提供的安装包五花八门有的会捆绑额外软件有的干脆是老版本套了个新壳。我个人的习惯是优先从 GitHub 的官方 release 页面或项目主页的 sourceforge 入口下载虽然有时下载速度一般但胜在安全可控。3.2 解压放置与目录规划压缩包下载完成后把它放到一个路径里没有中文、没有空格的目录解压。比如我把工具链解压到D:\mingw64\目录结构大概是这样的D:\mingw64 ├─ bin │ ├─ gcc.exe │ ├─ g.exe │ ├─ gdb.exe │ ├─ mingw32-make.exe │ └─ ... ├─ include ├─ lib ├─ libexec └─ ...为什么强调不要中文和空格因为后续 CMake、Makefile、脚本工具在解析路径时遇到空格会经常出问题。很多开源项目在 Windows 上的构建失败都源于路径里有个空格你在C:\Program Files下装 MinGW 看似没问题但用 CMake 时稍不注意就报奇奇怪怪的错误。我自己的固定做法是要么D:\mingw64要么C:\mingw64简单干脆。3.3 配置系统环境变量 PATH解压完成只完成了一半还差最后一步让系统能找到 gcc、g、gdb 这些命令。右键“此电脑” → 属性 → 高级系统设置 → 环境变量 → 在“系统变量”里找到 Path把D:\mingw64\bin加进去。这里有一个 Windows 用户常踩的坑修改完环境变量之后如果当前已经打开了命令行窗口这个窗口里的环境变量不会自动刷新必须关掉重新打开。甚至某些 IDE 也是启动时读取环境变量修改后需要完全退出再重启才能生效。我第一次装好之后就是在旧终端里怎么敲 gcc 都提示找不到差点以为自己配错了重新开一个终端就正常了。配置完成后在命令提示符或者 PowerShell 里验证gcc --version g --version gdb --version能看到类似下面的输出表示工具链已经就绪gcc (GCC) 14.12.0 Copyright (C) 2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty...4. 编写第一个程序并验证工具链4.1 写一个 C 程序体验从源码到可执行文件为了验证工具链正常我习惯写一个简单程序检查编译、链接和运行三个环节。新建一个hello.c文件内容如下#include stdio.h int main() { printf(Hello, MinGW V14.12.0!\n); return 0; }在当前目录打开命令行执行编译命令gcc -o hello.exe hello.c这里-o指定输出文件名若不加则默认生成a.exe在 Windows 上默认就是这个名字和 Linux 的a.out略有区别。执行hello.exe如果一切正常会输出Hello, MinGW V14.12.0!如果这一步顺利通过说明编译器和链接器都正常工作的。如果系统提示缺少libgcc_s_seh-1.dll之类的运行库通常是没有把 MinGW 的 bin 目录添加到系统路径中或者运行时当前目录没有这些动态库。4.2 验证 C 编译与调试器再写一个 C 程序测试 g 和标准库的可用性#include iostream #include thread void hello() { std::cout thread says hello\n; } int main() { std::cout g version: __GNUC__ . __GNUC_MINOR__ . __GNUC_PATCHLEVEL__ std::endl; std::thread t(hello); t.join(); return 0; }编译命令g -stdc17 -o cpp_test.exe cpp_test.cpp -pthread注意这里使用了std::thread对应 MinGW 的线程模型必须是 posix否则会出现链接错误。编译成功后运行会看到输出。gdb用于调试基础使用方式是编译时加-g选项然后gdb cpp_test.exe进入调试器。4.3 用 CMake 加 MinGW Makefiles 构建一个管理下的项目进入真实项目阶段直接用命令敲gcc就不太现实了。我用一个最简单的 CMake 项目演示一下project/ ├─ CMakeLists.txt └─ main.cppCMakeLists.txt内容cmake_minimum_required(VERSION 3.15) project(MinGWExample LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(app main.cpp)在项目目录下执行cmake -G MinGW Makefiles -DCMAKE_C_COMPILERgcc -DCMAKE_CXX_COMPILERg .. # 如果要在单独的 build 目录下构建先 mkdir build cd build这里-G指定生成器。MinGW 下最常用的两个生成器是“MinGW Makefiles”和“Ninja”。“MinGW Makefiles”依赖mingw32-makeNinja 是另一个构建系统速度更快但需要额外安装 Ninja。如果 CMake 列出错误说找不到编译器多半是 CMake 没有找到 gcc/g 或没有被加入 Path。在 build 目录里运行生成的app.exe一切正常的话整个工具链链条就彻底跑通了。5. 必踩的坑与排查技巧速查表5.1 环境变量不起作用很多时候用户会环境变量设置明明无误但 gcc 依然提示“不是内部或外部命令”。常见原因有三个修改后没有新开终端终端虽然重开了但系统缓存还没刷新不同用户的环境变量不统一。排查方式是在命令行执行echo %PATH%看看你的 bin 目录是否在其中。如果存在但 gcc 依然无法运行大概率是 bin 目录下的 gcc.exe 本身有问题可能是解压不完整或者安装包损坏。提示安装包解压失败很隐蔽表面看文件都在实际上部分文件是空的或损坏。最简单的办法是用 7-Zip 重新解压或者对比压缩包里的文件大小。5.2 编译时找不到头文件或链接库这类问题经常出现在从 32 位切换到 64 位或者更换了 MinGW 工具链之后。头文件找不到要检查代码里 include 的路径是否存在。链接时找不到库文件要确认链接命令里指定的库文件路径是否正确。MinGW 的库文件命名和 MSVC 不一样MSVC 用.libMinGW 用.a或.dll.a不能混用。5.3 运行编译好的 exe 时缺少 DLL在开发机上编译运行好好的拷贝到别的电脑就弹窗说缺libstdc-6.dll、libgcc_s_seh-1.dll。这是 MinGW 程序的经典情况因为编译出的 exe 依赖了工具链的动态运行库。解决方案有三个方向将D:\mingw64\bin一起拷走并把它加入目标机器的 Path把动态库复制到 exe 所在目录——运行第二程序时 DLL 会在当前目录优先找到编译时使用-static-libgcc -static-libstdc选项让标准库静态链接到 exe 里文件会大一些但独立性强5.4 在 Visual Studio Code 里配置智能提示和构建任务VS Code 配合 C/C 扩展使用 MinGW 时需要显式配置编译器路径。比如在.vscode/c_cpp_properties.json里{ configurations: [ { name: Win64, includePath: [${workspaceFolder}/**, D:/mingw64/include/**], compilerPath: D:/mingw64/bin/gcc.exe, cStandard: c17, cppStandard: c17, intelliSenseMode: windows-gcc-x64 } ], version: 4 }任务配置.vscode/tasks.json可以设置-fdiagnostics-coloralways编译错误提示会有颜色区分排查起来轻松不少。对于任何在 VS Code 中配置过 MinGW 的人这个步骤几乎都是必踩项。5.5 与 MSVC 项目混用时的注意事项如果你在同一台机器上同时装了 Visual Studio 和 MinGW很容易出现“编译器被抢”的问题。CMake 默认可能是 MSVC命令行里可能调用了 cl.exe 而不是 gcc.exe。这并不意味着它们不能共存只是你在创建构建目录时最好显式指定编译器或者为 MinGW 单独建立一个构建目录。不然熬几个小时的构建失败最后发现是编译器选错会很沮丧。6. 几个值得一试的周边工具和扩展用法6.1 w64devkit 和 msys2 的关系MinGW 官方的 w64devkit 是一个比裸工具链更便捷的集成环境体积小开箱即用里面还包含 make、git 等常用命令。而 msys2 则是一个更像 Linux 的软件分发平台里面也带 MinGW-w64。如果你只是需要编译器w64devkit 或者纯 MinGW 就够用如果你还想要 bash、pacman 包管理器微软上开发会更顺手可以考虑 msys2。6.2 Makefile 的 Windows 适配很多 Linux 项目的 Makefile 到 Windows 上用 MinGW 常常会碰钉子。一是默认编译器名字可能写成 gcc但 Windows 下要改成gcc一般没问题二是 Makefile 中使用rm -f等 Unix 命令会报错因为 Windows 没有 rm。解决方式是用 MinGW 自带的mingw32-make而不是直接敲 make它的功能和 GNU make 保持一致。Makefile 中的删除命令也可以改成del或-rm。6.3 静态分析器和格式化工具GCC 14 系列本身就提供-Wall -Wextra -Wpedantic等编译选项帮助排查代码质量。另外我在项目里固定加入-Wshadow和-Wconversion这两个选项对提升代码严谨性帮助很大代价是会多不少噪音告警。格式化工具方面ClangFormat 可以独立使用也可以嵌入到编辑器里自动化格式化。7. 版本更新之后代码可能需要注意的变化从旧版 GCC比如 11.x、12.x升级到 14.12.0 并不是无缝衔接。GCC 的大版本更新往往伴随一些破坏性变化和新的警告最典型的是 C 标准库头文件去重、部分旧的#include习惯被弃用。尤其是项目使用了很多 C17 甚至更早语法编译时会跳出不少之前没见过的告警。建议更新后先重建一次整个项目观察告警信息做到心里有数不要急于关闭新告警。比如-Wdeprecated-declarations告警往往在 GCC 14 里比 GCC 12 更严格尽早解决比拖到后面省事。我在升级之后遇到最多的问题集中在第三方库上直接把旧版缓存删除重建能满足大多数场景。8. 一些实操碎碎念最后再分享三个我在实际使用中验证过的小技巧和编译器本身无关但能明显提高效率。第一个技巧是给gcc和g设置常用编译选项的别名。Windows 命令提示符没有特别方便的 alias 机制但在 PowerShell 里可以用函数包装或者直接在系统里加一个批处理文件。我把常用的-Wall -Wextra -stdc17编译参数都做进了自己的构建脚本里省得每次敲一长串。第二个技巧是把D:\mingw64\bin夹在 PATH 的前面而不是后面。如果系统里有多个 GCC 环境Ctrl空格是 Windows 10 的中文输入法切换命令行中执行where gcc可以看到实际调用的路径把它调整到预期位置即可。这能避免很多莫名其妙的“版本不对”问题。第三个技巧是保持压缩包源文件。你大概率会在某一天不小心删掉某个 DLL 或在调试时弄乱工具链目录手头有原始压缩包直接解压覆盖是最快的恢复方式。我在D:\SoftwarePackages里存了一份mingw64-v14.12.0.7z目前至少帮我省下过两次重新下载的时间。MinGW V14.12.0 这套工具链配 Windows 10 64 位装好后日常开发确实能用。编译速度和标准库支持在新版本上都有明显提升。如果你正处在“输入 gcc 还提示找不到命令”的阶段照着本文顺序配一轮应该能顺利跑起来。接下来就可以安心地写你的 C/C 代码了。本文还有配套的精品资源点击获取
