Cygwin、MSYS2、MinGW 关系梳理
在 Windows 上开发 C 语言程序,一定听说过 MSYS2、MinGW、Cygwin 这三个名词。它们似乎都能编译 C 语言程序,但是它们有什么区别?我应该用哪个?
Cygwin
Cygwin 的目标是在 Windows 上提供 Linux 的体验。在实现方式上,Cygwin 采用通过一个 DLL 兼容层,将 POSIX 接口翻译为 Windows 接口。因此 Cygwin 在运行速度上会相对较慢。
MSYS2
由于 Cygwin 体积庞大,因此有人分支了 Cygwin 的一个老版本进行精简,并命名为 MSYS(Minimal SYStem)。后来由于 MSYS 缺乏维护,其他人又分支了新版本的 Cygwin,并命名为 MSYS2。MSYS2 定期同步 Cygwin 的更新,并引入了 Arch Linux 的 pacman 作为包管理器。
UCRT64
UCRT64 是 MSYS2 项目的一部分,MSYS2 是 MSYS 的一个更现代化的分支,提供了一个更完整的类 Unix 环境。UCRT64 特别指的是使用 Universal C Runtime (UCRT) 的 64 位工具链。UCRT 是微软提供的一个 C 运行时库,旨在替代旧的 MSVCRT。MSYS2 提供了多种工具链选项,包括 mingw-w64-i686(32 位)、mingw-w64-x86_64(64 位)和 ucrt64(使用 UCRT 的 64 位工具链)。UCRT64 的目标是提供更好的兼容性和性能,特别是在使用现代 C++ 标准和 Windows API 时。
参考:
- What are MSYS2 and MinGW? | Reddit
- What is MSYS2? | MSYS2
- How does MSYS2 differ from Cygwin? | MSYS2
- mingw vs msys | GitHub
MinGW
MinGW 的目标是为 Windows 提供 GCC 编译套件。相比 MSYS2 和 Cygwin,MinGW 提供的只是工具,而不是完整的 Linux 开发体验。
总结
如果你需要完整的 Linux 开发体验,比如你需要 bash、vim、git 等命令,那么安装 MSYS2。如果你只需要编译 C++ 程序,那么安装 MinGW 就可以。

浙公网安备 33010602011771号