Windows下运行C++

本文最后更新于 2025年8月6日 下午

本文主要分享了在Windows系统下使用MSYS2(MinGW-w64, GCC, g++)编译和运行C++的方法。

安装MinGW-w64

C++编译器介绍

Windows下C++开发平台介绍

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语言源代码。

  1. 下载安装MSYS2。默认安装路径为:C:\msys64,可自定义。

    如果安装过程卡在50%(Updating trust database...),则”返回”上一步,关闭外网代理(甚至是断网)后,重新执行“下一步”安装。

  2. 编辑镜像配置文件,打开C:\msys64\etc\pacman.d\mirrorlist.mingw(根据实际安装路径调整)。在文件开头添加清华大学镜像源:

    1
    Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/$repo/

    保存文件。

  3. 打开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,可根据项目需求选择 CLANG64UCRT64。一般情况下,MINGW64 就足够了。

    1
    2
    3
    4
    5
    pacman -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-toolchain

    MSYS2终端默认Ctrl+INS为复制,Shift+INS为粘贴。

  4. 编辑环境变量,高级-环境变量-系统变量-Path-编辑-新建-C:\msys64\mingw64\bin(根据实际安装路径调整)-确定。

  5. 验证安装。重新打开MSYS2终端:

    1
    2
    g++ --version
    gdb --version

    若显示版本信息,则安装成功。

  6. 完成。

编译运行

使用MSYS2终端

  1. 打开MSYS2终端:

    1
    touch test.cpp  # 在~下新建test.cpp文件,具体路径可自定义
  2. 编写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;
    }
  3. 在MSYS2终端下执行:

    1
    2
    g++ test.cpp -o test
    .\test.exe
  4. 完成。

使用PowerShell

问题与解决

MSYS2终端能到达的(根)目录实际就是实际安装路径了,例如,C:\msys64

虽然设置环境变量后,PowerShell可以找到g++(g++ --version),但是当我使用PowerShell在本地路径下执行g++ test.cpp -o test后却没有生成可执行文件。

因此,如果想编译运行本地路径下的*.cpp文件,而不必须把文件放在``C:\msys64(根据实际安装路径调整)路径下,则需要在MSYS2终端内使用powershell命令,这样启动的 PowerShell 能继承 MSYS2 的环境变量。另,使用exit`命令退出PowerShell。

问题原因分析

  1. MSYS2 终端自动补全了大量环境变量:
    • MSYS2 的 bash 启动 PowerShell 时,PowerShell 会继承 MSYS2 环境变量。
    • 这些变量不仅仅包括 PATH,还包含了 MSYS2 运行依赖的各种 DLL 路径、TEMP 目录、可能还有 locale、MSYSTEM 等等。
    • 这让 g++ 能正常找到自身依赖和临时目录,所以编译能成功且 exe 能生成。
  2. 在纯 Windows PowerShell 下缺少了这些关键环境变量:
    • 仅仅在 PATH 里加上 mingw64\bin并不能完全模拟 MSYS2 终端的环境
    • 很多 g++/gcc 的 DLL 依赖、临时文件位置、甚至 C++ 运行时的加载机制,可能都依赖于这些环境变量。
    • 这也是为什么在“裸”PowerShell 下编译没有输出、没有 exe,而在 MSYS2 bash 下打开 PowerShell 却没问题。
  3. 结论:
    • MSYS2 的 g++/gcc 最推荐的调用环境就是 MSYS2 的 bash/mingw64 终端。
    • 如果你一定要在 PowerShell 里用,必须保证:
      • 全部 MSYS2 相关的环境变量都被正确设置(不仅仅是 PATH)。
      • 这其实很复杂,远不如直接用 MSYS2 自己的终端来得省心。
  4. 等等。

C++编译器

  1. 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++

  2. Clang / LLVM

    • 由 LLVM 项目开发,强调模块化和高性能,编译速度快,错误提示友好。
    • 支持 C、C++、Objective-C 等。
    • 在 macOS(Xcode)、Linux、Windows(MSYS2、WSL、官方预编译)均可用。
    • 命令:clang++
  3. MSVC(Microsoft Visual C++)

    • 微软出品的 Windows 平台主流 C/C++ 编译器。
    • 集成在 Visual Studio IDE 中,支持最新的 C++ 标准和 Windows API。
    • 命令:cl
  4. Intel C++ Compiler(ICC、ICX/ICL)

    • 英特尔推出的高性能 C/C++ 编译器,优化对 Intel CPU 的支持,适用于科学计算、工程应用。
    • 商业软件,但有部分免费版本。
  5. Borland C++ / Embarcadero C++ Builder

    • 早期 Windows 平台常见的 C++ 编译器,主要用于桌面应用开发。
  6. TinyCC (TCC)

    • 极小型的 C 语言编译器,也支持部分 C++ 特性,适合嵌入式和快速测试。
  7. 其他常见编译器

    • Digital Mars C++:轻量级 Windows C/C++ 编译器。
    • Watcom C/C++:历史悠久,用于嵌入式和老系统开发。
    • PGI/Nvidia HPC Compilers:针对高性能计算和 GPU 优化的编译器。
    • Apple clang:macOS Xcode 内置的 C++ 编译器(基于 Clang)。
  8. 等等。

Windows下C++开发平台

MSYS2

MSYS2(Minimal SYStem 2)是一个为Windows平台设计的软件开发环境。它的主要特点如下:

  1. 类Unix环境
    MSYS2为Windows用户提供了一个类似于Linux/Unix的命令行环境,支持大量GNU工具(如bash、gcc、make、awk等),让开发者可以在Windows下像在Linux上一样编译和构建软件。
  2. 基于Cygwin和MinGW-w64
    MSYS2最初基于Cygwin,但是做了很多优化。它集成了MinGW-w64编译器,可以用来生成原生Windows可执行文件(.exe),而不是依赖POSIX兼容层的程序。
  3. 高效包管理
    MSYS2自带了强大的包管理器pacman(与Arch Linux相同),可以方便地安装、升级、卸载软件包和开发库。
  4. 多种环境子系统
    • MSYS2 shell:用于运行基于POSIX环境的脚本,主要用于构建和管理工具本身。
    • MinGW 32/64-bit shell:用于编译生成原生的32位或64位Windows程序。
  5. 常见用途
    • 在Windows下编译开源项目(如git、vim、ffmpeg等)
    • 跨平台开发和移植
    • 作为轻量级的开发环境和脚本工具
  6. 与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 作为编辑器。

其他平台

  1. Visual Studio Code (VS Code)
    • 虽不是完整的 IDE,但配合 C++ 扩展(如 Microsoft C/C++ 扩展、CMake Tools、IntelliSense、调试器等)可成为强大的轻量级开发环境。
    • 可搭配多种编译器(MSVC、MinGW、Clang 等)和构建系统(CMake、Makefile)。
    • 跨平台,支持 Windows、Linux、macOS。
  2. CLion
    • JetBrains 出品的专业跨平台 C/C++ IDE,功能强大,支持 CMake、Makefile、Gradle 等多种项目管理方式。
    • 支持 Windows 下 MSVC、MinGW、WSL、Cygwin 等多种工具链。
    • 代码补全、重构、调试、单元测试等功能齐全,但为商业软件(付费)。
  3. Code::Blocks
    • 开源、轻量级的 C/C++ IDE,支持多种编译器(如 MinGW、MSVC、Clang)。
    • 界面简洁,适合初学者和小型项目。
  4. Dev-C++
    • 经典的 Windows C++ 开发环境,适合学习和教学用途。
    • 开源,集成 MinGW 编译器,但功能较为基础,维护不如上述几个活跃。
  5. Eclipse CDT
    • Eclipse 的 C/C++ 开发拓展(CDT),跨平台,支持多种编译器和调试工具。
    • 可用作大型项目开发,但对资源要求较高,配置略复杂。
  6. Cygwin
    • Windows 上的类 Unix 环境,类似 MSYS2,但更注重 POSIX 兼容性。
    • 可用作开发和构建 POSIX 兼容的 C/C++ 项目,但生成的程序通常依赖 Cygwin 运行库。
  7. WSL (Windows Subsystem for Linux)
    • 在 Windows 10/11 上运行原生 Linux 环境,可直接用 Linux 下的 GCC、Clang 等编译器和工具链。
    • 支持 VS Code 远程开发、CMake、Makefile 等,开发体验接近 Linux 原生。
  8. Qt Creator
    • 专为 Qt 跨平台应用开发设计的 IDE,也适合纯 C++ 项目。
    • 支持多种编译器和构建系统,界面友好,调试功能强。
  9. 其他命令行工具链
    • MinGW/MinGW-w64:纯编译工具链,可单独使用或结合其它编辑器。
    • LLVM/Clang:现代 C/C++ 编译器,可在 Windows 下独立使用。
  10. 等等。

总结对比:

  • 如果注重图形化、企业级支持,Visual StudioCLionQt Creator 是最佳选择。
  • 喜欢轻量级和灵活配置,VS CodeCode::BlocksDev-C++Eclipse CDT 都是不错的选择。
  • 偏向 Linux/Unix 风格和开源生态,MSYS2CygwinWSL 更适合。
  • 对于跨平台开发,Qt CreatorCLionVS Code(配合合适的工具链)表现优秀。

刷题推荐

Visual Studio Code + MinGW-w64

原因:

  1. 轻量、响应快
    VS Code 非常轻巧,打开速度快,适合频繁编写和调试短小的算法题代码。
  2. 跨平台体验
    VS Code 在 Windows/Linux/Mac 上都几乎一致,便于今后迁移或切换环境。
  3. 编译器灵活
    配合 MinGW-w64(GCC for Windows),可以用命令行一键编译运行,体验接近 LeetCode、牛客等平台的实际环境。
  4. 调试方便
    安装 C++ 插件后,支持断点、单步、变量查看等基本调试功能。
  5. 易于集成算法模板
    可自定义代码片段、配置多种编译运行脚本,适合刷题时反复调用自己的模板。
  6. 社区支持好
    很多刷题攻略、配置教程都以 VS Code+GCC 为例,新手易上手。

参考链接

在Windows上使用VS Code和MinGW配置C++开发环境

基于MSYS2的Mingw-w64 GCC搭建Windows下C++开发环境

windows 10上使用vscode编译运行和调试C/C++


Windows下运行C++
http://zeyulong.com/posts/f92e710b/
作者
龙泽雨
发布于
2025年8月4日
许可协议