五个 MSYS2 环境的区别
发表于 2026-03-19
五个 MSYS2 环境的区别
MSYS2 提供了多个独立的子系统(环境),每个环境都有自己的一套工具链、库和默认编译目标。它们的核心区别在于:
- 运行时依赖:生成的程序是依赖 MSYS2 的 POSIX 仿真层(
msys-2.0.dll),还是直接调用 Windows API(原生 Windows 程序)。 - 编译器:使用 GCC 还是 LLVM/Clang。
- C 运行时库:链接到微软的 MSVCRT(旧版)还是 UCRT(新版)。
- 目标架构:32 位还是 64 位。
具体说明如下:
| 环境名称 | 运行时 | 编译器 | C 运行时 | 目标平台 | 主要用途 |
|---|---|---|---|---|---|
| MSYS | msys-2.0.dll (POSIX 层) | GCC | MSVCRT | 任意 | 运行 Unix 工具,构建依赖 msys 的程序(如 bash、make) |
| MINGW32 | 原生 Windows | GCC | MSVCRT | 32 位 | 编译 32 位原生 Windows 程序(传统) |
| MINGW64 | 原生 Windows | GCC | MSVCRT | 64 位 | 编译 64 位原生 Windows 程序(传统) |
| UCRT64 | 原生 Windows | GCC | UCRT | 64 位 | 编译 64 位原生 Windows 程序(使用现代 C 运行时) |
| CLANG64 | 原生 Windows | Clang/LLVM | UCRT | 64 位 | 使用 Clang 编译 64 位原生 Windows 程序 |
补充说明:
- MSVCRT 是 Visual Studio 2013 及之前版本的 C 运行时,而 UCRT 是 Windows 10 引入的通用 CRT,与新版 Visual Studio 兼容性更好,推荐用于新项目。
- 所有“原生 Windows”环境生成的程序都可以在没有 MSYS2 的 Windows 系统上直接运行(只要对应的运行时库存在)。
- 虽然环境不同,但它们的包管理器是共用的,安装的包会放在 MSYS2 安装目录下的不同子文件夹中(如
mingw64、clang64等),同时也有公共目录如opt。