Windows下运行C++
本文最后更新于 2025年8月6日 下午
本文主要分享了在Windows系统下使用MSYS2(MinGW-w64, GCC, g++)编译和运行C++的方法。
安装MinGW-w64
MinGW-w64是Windows平台上的GNU编译器集合,提供了GCC编译器和GDB调试器。推荐通过MSYS2安装,以获得最新版本和便捷的包管理。
GCC(GNU Compiler Collection)是一个包含多个编译器的工具集合,因此可以被称为编译器套件或编译器集合。 它是由GNU项目开发的,其中包括C、C++、Objective-C、Fortran、Ada和其他语言的编译器。 GCC包含了多个编译器,如: GCC(GNU C Compiler):用于编译C语言源代码。 G++(GNU C++ Compiler):用于编译C++语言源代码。 GFortran(GNU Fortran Compiler):用于编译Fortran语言源代码。 GDC(GNU D Compiler):用于编译D语言源代码。
-
下载安装MSYS2。默认安装路径为:
C:\msys64
,可自定义。如果安装过程卡在50%(Updating trust database...),则”返回”上一步,关闭外网代理(甚至是断网)后,重新执行“下一步”安装。
-
编辑镜像配置文件,打开
C:\msys64\etc\pacman.d\mirrorlist.mingw
(根据实际安装路径调整)。在文件开头添加清华大学镜像源:1
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/$repo/
保存文件。
-
打开MSYS2终端:
在电脑开始菜单的 MSYS2 文件夹(默认)下,有多个 MSYS2 提供的环境,主要区别如下:
- MSYS2 MSYS:主要用于运行 Bash 脚本和一些基本的 Unix 工具,不建议用来编译 C/C++ 程序。
- MSYS2 MINGW64:用于 64 位 Windows 平台的 GCC(g++/gcc)编译环境,推荐用于大多数 C/C++ 开发。
- MSYS2 UCRT64:也是 64 位环境,使用 UCRT 运行时,兼容性更好,适合需要 UCRT 的项目。
- MSYS2 CLANG64:64 位 Clang/LLVM 编译环境。
- MSYS2 CLANGARM64:用于 ARM64 架构的 Clang 环境(一般用不到)。
建议: 如果你是普通 Windows 64 位 C/C++ 开发者,请选择
MSYS2 MINGW64
。如需用 Clang 或 UCRT,可根据项目需求选择CLANG64
或UCRT64
。一般情况下,MINGW64
就足够了。1
2
3
4
5pacman -Syu
# 过程中,MSYS2可能会因为安装更新而自动关闭,此时,可再次打开,然后再次执行“pacman -Syu”命令。
pacman -Syu # 重复执行直到提示 there is nothing to do
pacman -Su # 重复执行直到提示 there is nothing to do
pacman -S --needed base-devel mingw-w64-x86_64-toolchainMSYS2终端默认Ctrl+INS为复制,Shift+INS为粘贴。
-
编辑环境变量,高级-环境变量-系统变量-Path-编辑-新建-
C:\msys64\mingw64\bin
(根据实际安装路径调整)-确定。 -
验证安装。重新打开MSYS2终端:
1
2g++ --version
gdb --version若显示版本信息,则安装成功。
-
完成。
编译运行
使用MSYS2终端
-
打开MSYS2终端:
1
touch test.cpp # 在~下新建test.cpp文件,具体路径可自定义
-
编写
test.cpp
文件,示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
int sum = 0;
for (int num : numbers) {
sum += num;
}
std::cout << "Hello, VS Code with MinGW!" << std::endl;
std::cout << "Sum of numbers: " << sum << std::endl;
return 0;
} -
在MSYS2终端下执行:
1
2g++ test.cpp -o test
.\test.exe -
完成。
使用PowerShell
问题与解决
MSYS2终端能到达的(根)目录实际就是实际安装路径了,例如,C:\msys64
。
虽然设置环境变量后,PowerShell可以找到g++(g++ --version
),但是当我使用PowerShell在本地路径下执行g++ test.cpp -o test
后却没有生成可执行文件。
因此,如果想编译运行本地路径下的*.cpp
文件,而不必须把文件放在``C:\msys64(根据实际安装路径调整)路径下,则需要在MSYS2终端内使用
powershell命令,这样启动的 PowerShell 能继承 MSYS2 的环境变量。另,使用
exit`命令退出PowerShell。
问题原因分析
- MSYS2 终端自动补全了大量环境变量:
- MSYS2 的 bash 启动 PowerShell 时,PowerShell 会继承 MSYS2 环境变量。
- 这些变量不仅仅包括 PATH,还包含了 MSYS2 运行依赖的各种 DLL 路径、TEMP 目录、可能还有 locale、MSYSTEM 等等。
- 这让 g++ 能正常找到自身依赖和临时目录,所以编译能成功且 exe 能生成。
- 在纯 Windows PowerShell 下缺少了这些关键环境变量:
- 仅仅在 PATH 里加上
mingw64\bin
,并不能完全模拟 MSYS2 终端的环境。 - 很多 g++/gcc 的 DLL 依赖、临时文件位置、甚至 C++ 运行时的加载机制,可能都依赖于这些环境变量。
- 这也是为什么在“裸”PowerShell 下编译没有输出、没有 exe,而在 MSYS2 bash 下打开 PowerShell 却没问题。
- 仅仅在 PATH 里加上
- 结论:
- MSYS2 的 g++/gcc 最推荐的调用环境就是 MSYS2 的 bash/mingw64 终端。
- 如果你一定要在 PowerShell 里用,必须保证:
- 全部 MSYS2 相关的环境变量都被正确设置(不仅仅是 PATH)。
- 这其实很复杂,远不如直接用 MSYS2 自己的终端来得省心。
- 等等。
C++编译器
-
GCC(GNU Compiler Collection)
-
最著名的开源跨平台编译器,支持 C、C++、Fortran 等多种语言。
-
常用于 Linux、Unix、MinGW(Windows 下的 GCC 变种)、WSL 等环境。
MinGW-w64(Minimalist GNU for Windows, 64-bit)是一个将 GCC 编译器移植到 Windows 平台的项目。它的目标是让开发者可以在 Windows 上用 GCC 工具链编译生成原生的 Windows 可执行程序(.exe),而不依赖 POSIX 兼容层(如 Cygwin)。
MinGW-w64 是 MinGW 项目的升级版,增加了对 64 位 Windows 和更多 Windows API 的支持。
-
命令:
g++
-
-
Clang / LLVM
- 由 LLVM 项目开发,强调模块化和高性能,编译速度快,错误提示友好。
- 支持 C、C++、Objective-C 等。
- 在 macOS(Xcode)、Linux、Windows(MSYS2、WSL、官方预编译)均可用。
- 命令:
clang++
-
MSVC(Microsoft Visual C++)
- 微软出品的 Windows 平台主流 C/C++ 编译器。
- 集成在 Visual Studio IDE 中,支持最新的 C++ 标准和 Windows API。
- 命令:
cl
-
Intel C++ Compiler(ICC、ICX/ICL)
- 英特尔推出的高性能 C/C++ 编译器,优化对 Intel CPU 的支持,适用于科学计算、工程应用。
- 商业软件,但有部分免费版本。
-
Borland C++ / Embarcadero C++ Builder
- 早期 Windows 平台常见的 C++ 编译器,主要用于桌面应用开发。
-
TinyCC (TCC)
- 极小型的 C 语言编译器,也支持部分 C++ 特性,适合嵌入式和快速测试。
-
其他常见编译器
- Digital Mars C++:轻量级 Windows C/C++ 编译器。
- Watcom C/C++:历史悠久,用于嵌入式和老系统开发。
- PGI/Nvidia HPC Compilers:针对高性能计算和 GPU 优化的编译器。
- Apple clang:macOS Xcode 内置的 C++ 编译器(基于 Clang)。
-
等等。
Windows下C++开发平台
MSYS2
MSYS2(Minimal SYStem 2)是一个为Windows平台设计的软件开发环境。它的主要特点如下:
- 类Unix环境
MSYS2为Windows用户提供了一个类似于Linux/Unix的命令行环境,支持大量GNU工具(如bash、gcc、make、awk等),让开发者可以在Windows下像在Linux上一样编译和构建软件。 - 基于Cygwin和MinGW-w64
MSYS2最初基于Cygwin,但是做了很多优化。它集成了MinGW-w64编译器,可以用来生成原生Windows可执行文件(.exe),而不是依赖POSIX兼容层的程序。 - 高效包管理
MSYS2自带了强大的包管理器pacman
(与Arch Linux相同),可以方便地安装、升级、卸载软件包和开发库。 - 多种环境子系统
- MSYS2 shell:用于运行基于POSIX环境的脚本,主要用于构建和管理工具本身。
- MinGW 32/64-bit shell:用于编译生成原生的32位或64位Windows程序。
- 常见用途
- 在Windows下编译开源项目(如git、vim、ffmpeg等)
- 跨平台开发和移植
- 作为轻量级的开发环境和脚本工具
- 与WSL的区别
- MSYS2不需要Windows子系统Linux(WSL),直接在Windows原生运行。
- 生成的程序可以不依赖MSYS2运行时,是真正的Windows原生应用(通过MinGW-w64)。
Visual Studio 和 MSYS2 的对比
维度 | Visual Studio | MSYS2 |
---|---|---|
IDE支持 | 强,完整集成 | 无,需配合VSCode等 |
编译器 | MSVC | MinGW-w64 (GCC) |
跨平台 | 一般 | 很好 |
包管理 | 无 | pacman(丰富包库) |
调试体验 | 图形化,强大 | 命令行为主,可VSCode配合 |
Windows原生 | 完美支持 | 支持但API兼容性略差 |
开源项目兼容性 | 一般 | 很好 |
上手难度 | 低 | 略高(偏命令行) |
- 如果你的项目主要面向 Windows,并且需要 IDE、调试器和企业级工具,推荐使用 Visual Studio。
- 如果你追求跨平台开发、开源库支持或更喜欢 Linux/Unix 的开发模式,MSYS2 是更好的选择。
- 实际开发中,两者可以结合使用:用 MSYS2 安装库和工具链,用 Visual Studio 或 VS Code 作为编辑器。
其他平台
- Visual Studio Code (VS Code)
- 虽不是完整的 IDE,但配合 C++ 扩展(如 Microsoft C/C++ 扩展、CMake Tools、IntelliSense、调试器等)可成为强大的轻量级开发环境。
- 可搭配多种编译器(MSVC、MinGW、Clang 等)和构建系统(CMake、Makefile)。
- 跨平台,支持 Windows、Linux、macOS。
- CLion
- JetBrains 出品的专业跨平台 C/C++ IDE,功能强大,支持 CMake、Makefile、Gradle 等多种项目管理方式。
- 支持 Windows 下 MSVC、MinGW、WSL、Cygwin 等多种工具链。
- 代码补全、重构、调试、单元测试等功能齐全,但为商业软件(付费)。
- Code::Blocks
- 开源、轻量级的 C/C++ IDE,支持多种编译器(如 MinGW、MSVC、Clang)。
- 界面简洁,适合初学者和小型项目。
- Dev-C++
- 经典的 Windows C++ 开发环境,适合学习和教学用途。
- 开源,集成 MinGW 编译器,但功能较为基础,维护不如上述几个活跃。
- Eclipse CDT
- Eclipse 的 C/C++ 开发拓展(CDT),跨平台,支持多种编译器和调试工具。
- 可用作大型项目开发,但对资源要求较高,配置略复杂。
- Cygwin
- Windows 上的类 Unix 环境,类似 MSYS2,但更注重 POSIX 兼容性。
- 可用作开发和构建 POSIX 兼容的 C/C++ 项目,但生成的程序通常依赖 Cygwin 运行库。
- WSL (Windows Subsystem for Linux)
- 在 Windows 10/11 上运行原生 Linux 环境,可直接用 Linux 下的 GCC、Clang 等编译器和工具链。
- 支持 VS Code 远程开发、CMake、Makefile 等,开发体验接近 Linux 原生。
- Qt Creator
- 专为 Qt 跨平台应用开发设计的 IDE,也适合纯 C++ 项目。
- 支持多种编译器和构建系统,界面友好,调试功能强。
- 其他命令行工具链
- MinGW/MinGW-w64:纯编译工具链,可单独使用或结合其它编辑器。
- LLVM/Clang:现代 C/C++ 编译器,可在 Windows 下独立使用。
- 等等。
总结对比:
- 如果注重图形化、企业级支持,Visual Studio、CLion、Qt Creator 是最佳选择。
- 喜欢轻量级和灵活配置,VS Code、Code::Blocks、Dev-C++、Eclipse CDT 都是不错的选择。
- 偏向 Linux/Unix 风格和开源生态,MSYS2、Cygwin、WSL 更适合。
- 对于跨平台开发,Qt Creator、CLion、VS Code(配合合适的工具链)表现优秀。
刷题推荐
Visual Studio Code + MinGW-w64
原因:
- 轻量、响应快
VS Code 非常轻巧,打开速度快,适合频繁编写和调试短小的算法题代码。 - 跨平台体验
VS Code 在 Windows/Linux/Mac 上都几乎一致,便于今后迁移或切换环境。 - 编译器灵活
配合 MinGW-w64(GCC for Windows),可以用命令行一键编译运行,体验接近 LeetCode、牛客等平台的实际环境。 - 调试方便
安装 C++ 插件后,支持断点、单步、变量查看等基本调试功能。 - 易于集成算法模板
可自定义代码片段、配置多种编译运行脚本,适合刷题时反复调用自己的模板。 - 社区支持好
很多刷题攻略、配置教程都以 VS Code+GCC 为例,新手易上手。
参考链接
在Windows上使用VS Code和MinGW配置C++开发环境