msys2 linux 什么区别,Cygwin、Msys、MinGW、Msys2的区别与联系(转)

网上有不少文章讲它们之间的区别与联系,初学者看的一头雾水,在知乎上看到这篇文章讲的很清楚,容易理解。

在讲区别联系以前,咱们先看一下这几个东东的前世此生。

Cygwin,原 Cygnus 出品(已被红帽收购),目前是 RedHat 名下的项目。项目的目的是提供运行于 Windows 平台的类 Unix 环境(以 GNU 工具为表明),为了达到这个目的,Cygwin 提供了一套抽象层 dll,用于将部分 Posix 调用转换成 Windows 的 API 调用,实现相关功能。这里面最典型的,最基本的模拟层就是那个 cygwin1.dll。除此以外,随着 Linux 系统的发展壮大,目前的 Cygwin 已经不只仅提供 POSIX 兼容,所以也顺带多了更多模拟层的依赖关系。

Cygwin 的目录结构基本照搬了 linux 的样子,但同时,也兼容了 Windows 的许多功能:大部分应用使用 Unix 风格的路径,Windows的盘符经过相似挂载点的方式提供给 Cygwin 使用;Cygwin 中既能够运行 Cygwin 的应用(依赖模拟层),又能够运行 Windows 应用,而传递给应用的路径会通过它的模拟层变换,以此保证程序运行不会出错。

因为它的模拟层实现了至关良好的 Posix 兼容,人们试着将许多重要的 Linux/BSD 应用移植到了Cygwin下,使得Cygwin愈来愈大,功能也愈来愈丰富,以致于目前不少人直接把将Linux应用移植到Windows平台的任务都交给了Cygwin(固然,这种移植并不是原生)。事实上,Cygwin诞生之初,本就是想经过GCC编译出Windows应用来,由于bootstrap GCC而顺带搞了一坨别的东西过来,最后发展到如今的。

小结:Cygwin是运行于Windows平台的POSIX“子系统”,提供Windows下的类Unix环境,并提供将部分 Linux 应用“移植”到Windows平台的开发环境的一套软件。按照我常常开玩笑的话来说,Cygwin 基本上就是传说中的 GNU/NT 系统(对照 GNU/Linux,GNU/BSD,GNU/HURD)。

MinGW,

Minimalist GNU for Windows,用于开发原生(32位) Windows 应用的开发环境。它主要提供了针对 win32 应用的 GCC、GNU binutils 等工具,以及对等于 Windows SDK(的子集)的头文件和用于 MinGW 版本 linker 的库文件(so、a等,而不是 VC 的 lib)。

MinGW 可以替代 cl 用于编译不包含 MFC 的、以 WinSDK 为主的 Windows 应用,而且编译出来的应用不依赖于第三方的模拟层支持,其运行时为大部分 Windows 标配的 msvcrt(故称原生 Windows 应用)。除此以外,MinGW 也支持 GCC 支持的其余语言。

由于这些缘由,MinGW 被许多 Linux 上发展起来的开发工具选择为 Windows 版本的默认编译器,例如 CodeBlocks,例如 DevC++。

小结,MinGW 是用于进行 Windows 应用开发的 GNU 工具链(开发环境),它的编译产物通常是原生 Windows 应用,虽然它自己不必定非要运行在 Windows 系统下(是的 MinGW 工具链也存在于 Linux、BSD 甚至 Cygwin 下)。

MSYS,因为 MinGW 自己仅表明工具链,而在 Windows 下,因为那个shi同样的cmd,以及配套的命令行工具不够齐全(也不舒服),所以,MinGW 开发者从曾经比较旧的 Cygwin 建立了一个分支,也用于提供类 Unix 环境。但与 Cygwin 的大而全不一样,MSYS 是冲着小巧玲珑的目标去的,因此整套 MSYS 以及 MinGW,主要以基本的 Linux 工具为主,大小在 200M 左右,而且没有多少扩展能力。

MSYS 是用于辅助 Windows 版 MinGW 进行命令行开发的配套软件包,提供了部分 Unix 工具以使得 MinGW 的工具使用起来方便一些。若是不喜欢庞大的 Cygwin,并且使用很少,能够试试。不过喜欢完总体验、不在意磁盘占用等等,仍是推荐 Cygwin 而不是 MSYS。

MinGW-w64,前面提到的 MinGW,是针对 32 位 Windows 应用开发的。并且因为版本问题,不能很好的支持较新的 Windows API。MinGW-W64 则是新一代的 MinGW,支持更多的 API,支持 64 位应用开发,甚至支持 32 位 host 编译 64 位应用以及反过来的“交叉”编译。除此以外,它自己也有 32 位和 64 位不一样版本,其它与 MinGW 相同。

MSYS2,因为 MinGW 万年不更新,MSYS 更是,Cygwin的许多新功能 MSYS 没有同步过来,因而 Alex 等人创建了新一代的 MSYS 项目。仍然是 fork 了 Cygwin(较新版),但有个更优秀的包管理器 pacman,有活跃的开发者跟用户组,有大量预编译的软件包(虽然确定没有Cygwin多)……对于不喜欢庞大的 Cygwin 的用户而言,推荐试试 msys2。

区别(小结):Cygwin是模拟 POSIX 系统,源码移植 Linux 应用到 Windows 下;MinGW 是用于开发 Windows 应用的开发环境。

联系:均提供了部分 Linux 下的应用,多跑在 Windows 上;MinGW 做为 Cygwin 下的软件包,能够在 Cygwin 上运行。

声明:本文章转自知乎,若有侵犯,请告知删除。

做者:LiTuX

连接:https://www.zhihu.com/question/22137175/answer/90908473

来源:知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MSYS2CygwinMinGW 和 Clang 都是用于在 Windows 系统上编译和运行 Unix/Linux 程序的工具集。 MSYS2 是一个基于 Cygwin 的工具集,它包含了 Cygwin 本身所提供的工具和库,同时也包含了许多其他开源软件的工具和库,例如 Git、Python、Ruby、GCC 等。MSYS2 还提供了一些额外的工具和库,例如 Pacman 包管理器和 MSYS2 系统工具。 Cygwin 是一个用于在 Windows 上模拟 Unix/Linux 环境的工具集,它提供了一个完整的 POSIX 环境,包括了许多 Unix/Linux 工具和库,例如 Bash、GCC、GDB、Emacs 等。 MinGW 是一个基于 Windows 平台的轻量级开发工具集,它允许开发者使用 GCC 编译器和相关工具在 Windows 上编译和运行 C/C++ 程序。与 Cygwin 不同的是,MinGW 不需要模拟 Unix/Linux 环境,它直接在 Windows 上运行,并且生成的可执行文件不依赖于任何运行时库。 Clang 是一个 C/C++/Objective-C 编译器,它支持多种平台,包括 Windows。与 GCC 不同的是,Clang 的编译速度更快,生成的代码更加优化,同时也支持更多的语言特性和标准。 总的来说,MSYS2Cygwin 更加完整和强大,可以提供一个完整的 Unix/Linux 环境,但是相应的也会带来更多的性能损失和依赖问题;MinGW 则更加轻量级,可以直接在 Windows 上运行,但是相应的可能会缺少一些 Unix/Linux 工具和库;而 Clang 则是一种更加优秀的编译器选择,可以在 Windows 上提供更加快速和优化的编译体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值