MinGW,MSYS,cygwin 区别

MinGW:是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。
MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。
MSYS:Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境。
cygwin:是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件。

区别:
基本上Cygwin是提供了在windows上使用unix环境的套件,不过开发程式的话编译出来的程式码是需要在Cygwin下才能正确执行,虽然也是可以使用-mno-cygwin的flag。

MSYS & MinGW都包括了許多的子套件在里面,首先MSYS是Minimal SYStem的缩写提供了类似Bourne shell环境下要编译程式的一些utility像automake之类。
而MinGW則是Minimalistic GNU for Windows的缩写,他包含了许多的compiler for windows、win32api等等是用來编译for windows的执行程序用,不像Cygwin编出來的程式必須在Cygwin下才能跑。
因此可以看出因此可以看出:
Cygwin & MSYS的角色是有重叠的,我們可以在Cygwin提供的环境下用MinGW的compiler&library来编出可单独执行的Windows 执行档,在MinGW的FAQ也有提到这点,就是把PATH设定正确,在Cygwin下使用MinGW的compiler & library即可 。

MSYS是windows的.dll/.exe等文件的库文件, 
库文件就是帮你实现了某些功能的库函数的封装,你可以在你的程序中调用这些函数,然后连接一下就可以了。
再看区别: 
cygwin/gcc和MinGW都是gcc在windows下的编译环境 
cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从boost库的划分中可以看出来端倪,cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets。
所以完全可以和linux一起同步更新gcc版本,而不用担心问题,并且在cygwin/gcc做的东西(不用微软的)可以无缝的用在linux 下,没有任何问题。是在windows下开发linux程序的一个很好的选择。但是在cygwin/gcc下编译出来的程序,在windows执行必须依赖cygwin1.dll,如果不想依赖这个东西的化,必须在gcc的编译选项中加入-mno-cygwin。加入这个选项其实gcc编译器就会自动的选择在安装cygwin/gcc时安上的mingw,这个mingw就是gcc的一个交叉编译。
对于mingw作为gcc在windows上的一个实现,由于不像cygwin的gcc在一个模拟linux上运行,同时相当一部分linux的工具不能够使用,不过现在已经有Msys这个模拟unix的shell,可以解决很多的问题,不过没有cygwin好用,而cygwin/gcc的no- cygwin选项又依赖于mingw的支持,所以更新的更慢的,现在只是到3.3.3。在mingw下也是可以升级gcc的,不过需要使用msys。升级方法和在cygwin和linux下差不多,就不再罗嗦了。不过就我的升级经验来看好像都不太顺利。具体深入的测试,我也没有时间做了。
也是可以让cygwin的最新安装的gcc支持no-cygwin,需要再做一遍交叉编译,但是我不会做,只好算了,呵呵,也许那一天我把这个搞定,再开一个贴吧。
根据以上的分析,如果在windows开发linux程序,cygwin是很好的选择。如果你开发的程序不介意有一个cygwin1.dll的话,也是可以选择cygwin的。如果你是想开发windows下的程序,还要必须用gcc的化,mingw是很好的一个选择。但是在windows下有太多的编译器了,bc,vc,intel c.....。
顺便说就题外的化,据说gcc4.0.0性能有很大的提升,如果我升级完gcc4后,再编译一把gcc4是不是以后的编译性能会提高很多呢?有机会一定要测试一下了,呵呵。

Cygwin  cygwin是一个在windows平台上运行的unix模拟环境,是cygnus 
solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。
  cygnus当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。
  关于cygwin实现的更详细描述,请参考http://cygwin.com/cygwin-ug-net/highlights.html.
[编辑本段]
简介
  Cygwin包括了一套库,该库在Win32系统下实现了POSIX系统调用的API;还有一套GNU开发工具集(比如GCC、GDB),这样可以进行简单的软件开发;还有一些UNIX系统下的常见程序。2001年,新增了X Window System。
  另外还有一个名为MinGW的库,可以跟Windows本地的MSVCRT库(Windows API)一起工作。MinGW占用内存、硬盘空间都比较少,能够链接到任意软件,但它对POSIX规范的实现没有Cygwin库完备。
  但糟糕的是,Cygwin不支持Unicode。实际上,除了当前Windows系统以及OEM codepages(例如,一个俄语用户,他的codepages是CP1251和CP866,而不能是KOI8-R、ISO/IEC 8859-5、UTF-8等),Cygwin对其他字符集都不支持。
  Red Hat规定,Cygwin库遵守GNU General Public License,但也可以跟符合开源定义的自由软件链接。Red Hat另有价格不菲的许可协议,这样使用Cygwin库的专属软件,就可以进行再发布。
  你可以通过Cygwin Mailing Lists,订阅若干个Cygwin相关的邮件列表。
[编辑本段]
[编辑] 历史
  Cygwin始于1995年,最初作为Cygnus工程师Steve Chamberlain的一个项目。当时Windows NT和Windows 95将COFF作为目标代码,而GNU已经支持x86和COFF,以及C语言库newlib。这样至少在理论上,可以将GCC重定向,作为cross compiler,从而产生能在Windows上运行的可执行程序。在后来的实践中,这很快实现了。
  接下来的问题是如何在Windows系统中引导编译器,这需要对Unix的足够模拟,以使GNU configure的shell script可以运行,这样就用到像bash这样的shell,进而需要Fork和standard I/O。Windows含有类似的功能,所以Cygwin库只需要进行翻译调用、管理私有数据,比如文件描述符。
  1996年后,由于看到cygwin可以提供Windows系统上的Cygnus嵌入式工具(以往的方案是使用DJGPP),其他工程师也加入了进来。特别吸引人的是,Cygwin可以实现three-way cross-compile,例如可以在Sun工作站上build,如此就形成Windows-x-MIPS cross-compiler,这样比单纯在PC上编译要快不少。1998年起,Cygnus开始将Cygwin包作为产品来提供。

Mingw MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是

Minimalist GNU on Windows的略称。这里的“纯粹”是指「使用msvcrt.dll的应用程序」。无法使用MFC (Microsoft Foundation Classes微软基础类库)。
[编辑本段]
概念
  MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时库。
  MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC 产生 Windows32 程序。
  在基本层,MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时间库(MSVCRT.DLL),该库在所有的 NT OS 上有效,在所有的 Windows 95 发行版以上的 Windows OS 有效,使用基本运行时间,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时间扩展。该功能是 Windows32 API 不具备的。下一个组成部分是 w32api 包,它是一组可以使用 Windows32 API 的包含文件和端口库。与基本运行时间相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 Windows32 API 功能。
mingw工具集合
  实际上 MinGW 并不是一个 C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。
  开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。
  (此前的 cygwin 虽然也是 GNU 的 Windows 移植,但是 cygwin 是有版权的,而不是 GNU。)
  所以,使用 MinGW 我们就可以像在 Linux 下一样使用 GNU 程序开发工具。
  GCC 就是 MinGW 的核心所在,GCC 是一套支持众多计算机程序语言的编译系统,而且在语言标准的实现上是最接近于标准的。并且 GCC 几乎可以移植到目前所有可用的计算机平台。(我的电脑上就还装有 DevKitPro,里面包含 GCC 的 ARM(for GBA/DS/GP32) 和 MIPS(for PSP) 版本。)
  GCC 本身不像 VC 那样拥有 IDE 界面(在 Windows 上也存在 Dev C++ 之类的支持 MinGW 编译器的 IDE)。源代码编辑你可以选用任何你喜欢的文本编辑器(据说微软的开发人员包括 VC 的开发都不用 VC 所带的 IDE 编辑器,而是选用 GNU 的 VIM 编辑器)。然后使用 make 等工具来进行软件项目的编译、链接、打包乃至发布。而像 cvs(svn) 源代码版本控制工具可以让世界上任何一个角落的人都可以参与到软件项目中来。
  关于 MFC,微软基础库类,这个随 VC++ 携带的一个源代码公开的开发包,和其他 Windows 程序开发包是一样的。如果有 VC++ 的授权,你完全可以使用 MFC 的源代码,也就是你使用 GCC 来编译 MFC 程序是完全可以的。
  当然,GNU 下也很多 Windows 程序开发包,甚至有一些是支持跨平台使用的。不仅仅可以直接把源代码编译为 Windows 程序,也可以不经修改编译为其他操作系统的图形程序。
  不过 GNU 下,最流行的图形界面开发库是 GTK+。GTK+ 也能很好的运行在 Windows 平台(比如 GIMP 和 Gaim)。

  总体说来,使用 MinGW 就是 GNU。

MSYS
  MSYS:Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境。(是否厌倦了Cygwin蜗牛般的shell环境,试试MSYS中的rxvt吧)
  另:
  MinGW:即Minimalist GNU for Windows。它是一些头文件和函数库的集合,该集合允许人们在没有第三方动态链接库的情况下使用GCC(GNU Compiler C)产生Win32程序。
  MinGW主要由GNU binary utilities、GCC和GDB组成。同时还包括一些必要的库,例如libc(C Runtime),及专门用于Win32环境的API接口库。如果你想学习linux环境下的编程,而又不想装linux,那你就装一个MinGW吧。
  MinGW & MSYS的主页:http://mingw.sourceforge.net/
  中国的 MSYS 发行版项目(包含 mpkg 包管理系统,可以下载许多已编译好的工具和库,如qemu、bochs、libSDL等):
  http://msys-cn.googlecode.com
  MSYS,是UG中生成的刀位文件(前置文件)中,用来定义加工坐标系的关键字。
  比方说
  MSYS/0.0000,0.0000,0.0000,1.0000000,0.0000000,0.0000000,0.0000000,1.0000000,0.0000000
  这样一行,其中前三个表示加工的原点坐标,后6个是多轴中旋转坐标矩阵的前两列。


  MSYS:Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境。(是否厌倦了Cygwin蜗牛般的shell环境,试试MSYS中的rxvt吧)
  另:
  MinGW:即Minimalist GNU for Windows。它是一些头文件和函数库的集合,该集合允许人们在没有第三方动态链接库的情况下使用GCC(GNU Compiler C)产生Win32程序。
http://code.google.com/p/msys-cn/
MSYS不是一个操作系统,而是一个通过将Linux源代码在Win32上编译而成的工作环境;
MSYS类似于Cygwin,但是由于编译方式的不同,速度更快、体积更小、功能强大;
使用MSYS可以很方便的取代商业的VC编译器,开发出商业版权的程序而不受版权限制;
本项目开发了mpkg包管理程序,添加对各种开源库支持,提供MSYS发行版的下载服务;
默认提供捆绑在一起的C/C++/Fortran编译器,Fortran可以适用于进行科学计算的用户;
MSYS-CN项目目前为止由于技术难度无法支持中文,有兴趣的朋友可以自行研究解决方案;


转自 http://hi.baidu.com/zyqhi2010/blog/item/24b604fab614c64d242df274.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值