Cygwin 和MinGW 的区别与联系是怎样的?

    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 上运行。

1、从目标上说

  • MinGW 是让Windows 用户可以用上GNU 工具,比如GCC。
  • Cygwin 提供完整的类Unix 环境,Windows 用户不仅可以使用GNU 工具,理论上Linux 上的程序只要Cygwin 重新编译,就可以在Windows 上运行。

2、从能力上说

  • 如果程序只用到C/C++ 标准库,可以用MinGW 或Cygwin 编译。
  • 如果程序还用到了POSIX API,则只能用Cygwin 编译。

3、从依赖上说

  • 程序经MinGW 编译后可以直接在Windows 上面运行。
  • 程序经Cygwin 编译后运行,需要依赖安装时附带的cygwin1.dll。

 

    因为cygwin是虚拟了一个linux环境(cygwin.dll),运行时都需要这个中间模块,所以运行起来会慢一些。如果仅仅是学习和一般使用,这种慢很难察觉。但是如果是为了科学计算,差别会明显。(cygwin下30s,mingw下运行只需6s)
另外,cygwin下也有mingw的实现版本。 推荐使用这种方式来使用mingw。

转载:https://www.zhihu.com/question/22137175

           https://www.zhihu.com/question/22137175/answer/80239625 

           https://www.zhihu.com/question/22137175/answer/22781290                                           

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MSYS2、CygwinMinGW 和 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 的编译速度更快,生成的代码更加优化,同时也支持更多的语言特性和标准。 总的来说,MSYS2 和 Cygwin 更加完整和强大,可以提供一个完整的 Unix/Linux 环境,但是相应的也会带来更多的性能损失和依赖问题;MinGW 则更加轻量级,可以直接在 Windows 上运行,但是相应的可能会缺少一些 Unix/Linux 工具和库;而 Clang 则是一种更加优秀的编译器选择,可以在 Windows 上提供更加快速和优化的编译体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值