MinGW、MSYS、Cygwin分别是什么意思?他们之间的关系是什么?

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 MSYS & MinGW都包括了许多的子套件在里头首先MSYS是Minimal SYStem的缩写提供了类似Bourne shell环境下要编译程式的一些utility像automake之类。

而MinGW則是Minimalistic GNU for Windows的缩写他包含了许多的compiler for windows、win32api等等是用來编译for windows的执行档用不像Cygwin编出來的程式必須在Cygwin下才能跑而MinGW则是Minimalistic GNU for Windows的缩写他包含了许多的compiler for windows、win32api等等是用来编译for windows的执行档用不像Cygwin编出来的程式必须在Cygwin下才能跑

因此可以看出因此可以看出概念:

(1)mingw,是minimalist gnufor windows的缩写。它是一个可自由使用和自由发布的windows特定头文件和使用gnu工具集导入库的集合,允许你在gnu/linux和windows平台生成本地的windows程序而不需要第三方c运行时(c runtime)库。mingw 是一组包含文件和端口库。

(2)msys即minimal gnu(posix)system on windows,是一个小型的gnu环境,包括基本的bash,make等等。是windows下最优秀的gnu环境。

(3)cygwin是一个在windows平台上运行的类unix模拟环境,是cygnus solutions公司开发的自由软件。

三者的关系:

cygwin和 msys的角色是有重叠的,可以在cygwin提供的环境下用mingw的compiler&library来编出可单独执行的windows 执行档,在mingw的faq,就是把path设定正确,在cygwin下使用mingw的compiler & library即可 。

cygwin 和wingw的区别

Unix下编译通过的C代码,在win32下编译是不能通过的 ,当然Unix 和win32的API都是符合标准C,也就是说,大多数函数调用在unix和win32下是相同的.但是,unix有自己一些独特的API(如fork,spawn,signals,select,sockets等),如果代码中使用了这些API,在win32下当然找不到对应的库.

但是,这些API的功能在win32中也能实现,也许你已经发现了一个能让window编译Unix风格代码的方法:

1.修改编译器,让window下的编译器把诸如fork的调用翻译成等价的形式--这就是mingw的做法.

2.修改库,让window提供一个类似unix提供的库,他们对程序的接口如同unix一样,而这些库,当然是由win32的API实现的--这就是cygwin的做法.

MinGW相比CygWin/gcc来讲,更加贴近win32。因为它几乎支持所有的Win32API。它所连接的程序,不需要任何第三方库即可运行。

CygWin/gcc,其实这是两个东西。CygWin是一个让Windows拥有Unix-like环境的软件。而gcc就是安装在CygWin上的编译器。

CygWin/gcc与MinGW的最大区别在于:使用CygWin/gcc可以在Windows下调用unix-like的API,(如fork,spawn,signals,select,sockets等)。也就是说Cygwin是运行在Windows下的,但是她使用的是Unix-like系统的函数和思想。由于这个区别,导致的结果就是用CygWin/gcc编译出来的程序可以无缝的运行在*nix环境下。但是如果调用了unix特有的API函数,在windows环境下不能正常运行,如果想在windows下正常运行的,就必须依赖cygwin1.dll,速度上会有些影响。

而用MinGW编译出来的程序,如果源代码里面调用了unix环境的API,则MinGW会把这些对UNIX的API调用翻译成win32下等价的形式。同时这个程序是不能在windows下运行的。

说白了,如果你是想在windows环境下开发linux运行程序,那么CygWin/gcc是你的不二之选。

而如果你想开发的是windows运行程序,并且追求速度,那么二者相比而言,MinGW是更好的选择

我没有用过这两个工具,只是有点想选择一个来用,于是在网上比较一下两者有啥不同,然后选一个适合自己的。过程中,我发现网上一份文章可能被多个人转载,被多个人稍微修改后当成自己的随笔写出,误认不浅。

说一点,什么cygwin编译的程序可以无缝在linux上运行,根本就不能这么理解。

cygwin官方的一个定义是Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.

翻译过来就是

cygwin不是让linux程序能在windows上运行的方法,如果你想要让linux程序能在windows运行,那么你只有用cygwin来重新编译一下源文件。

这句话完全反驳了无缝运行在linux的说法。就是说你在linux上编译的elf程序不能直接拿到cygwin上运行,同样,你用cygwin编译的程序也不是linux的elf格式,而是exe格式,exe是无法在linux上运行的。

cygwin和mingw都是为用户提供在windows操作系统使用GNU工具的方法,使得在windows上可以编译为linux写的c源代码并运行(让你可以用signal等linux才有的api)。真正的不同在于

1,cygwin大,mingw小

2,cygwin编译后的exe需要cygwin1.dll作为支持,而mingw不需要就可以直接运行,因为有中间层所以cygwin慢,mingw快。

3,cygwin包含的内容更全面,能编译通过的linux源文件更多,mingw的min是minimalist所以能编译通过的更少。但,不是全部,就是说别指望你可以把任何为linux写的源代码在cygwin或mingw编译通过并运行。

What Is Cygwin?

Cygwin is a Linux-like environment for Windows. It consists of two parts: A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functionality.

A collection of tools which provide Linux look and feel.

The Cygwin DLL currently works with all recent, commercially released x86 32 bit and 64 bit versions of Windows, with the exception of Windows CE.

Note that the official support for Windows 95, Windows 98, and Windows Me will be discontinued with the next major version (1.7.0) of Cygwin.

What Isn't Cygwin?

Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.

Cygwin is not a way to magically make native Windows apps aware of UNIX ? functionality, like signals, ptys, etc. Again, you need to build your apps from source if you want to take advantage of Cygwin functionality.

MinGW: A collection of freely available and freely distributable Windows specific header files and import libraries combined with GNU toolsets that allow one to produce native Windows programs that do not rely on any 3rd-party C runtime DLLs.

MinGW:根据我的理解,它是一个Windows下的编译器(实际上是一系列开发工具)。与Windows下其它编译器不同的是,MinGW与Linux下广泛使用的GNU(基本上)完全兼容,这意味着,在Linux下如何编译源代码,在MinGW中也可以以完全相同的方式编译。

我个人以为,MinGW的出现是有原因的:有些Linux下的开发人员(比如开源阵营)发布的源代码通常只提供Linux下的编译方式,而不提供Windows下的编译方式(这可能与其不熟悉windows操作系统有关),但确实有不少用户需要在在Windows下编译使用此源代码。这在种情况下,如果Windows用户想用VC、BC等编译器编译该源代码,必须重写Makefile(各种编译器所支持的Makefile不尽相同),工作量比较大不说,还很难保证不出错。MinGW的出现,提供了两个平台下的“跨平台编译方案”。MinGW与MSYS相配合,连./configure都有了。与GNU不同的是,MinGW编译生成的是Windows下的可执行文件(.exe)或库文件(.dll,.lib)——不过编译过程中的的中间文件仍然是.o文件,而不是.obj文件(这当然无所谓了,中间文件嘛,编译完成后就没有用了)。MinGW好像是在Cygwin基础上发展而来的。顺便说一下Cygwin,它与MinGW在想法上基本是一致的,两者相比,Cygwin是重量级的(需下载50M以上直至数百兆不等,安装后占用空间可达1G),MinGW是轻量级的(需下载的文件只有20M,安装后70M左右),这是单纯从体积上说的,另外Cygwin现在据说也不是完全免费的了。

wxWidgets-2.6.2在Windows下的编译方式。用VC编译的话,有两种方式:VC工程,Makefile。前者就不用说了,用VC打开*.dsw文件,F7就可以了。这里说一下Makefile的编译方式,首先进入命令行窗口(cmd.exe 或 command.exe),切换路径到wxWidgets源代码所在目录下的 build/msw 子目录,执行“nmake -f makefile.vc”即可。用MinGW编译的话,基本上与前面类似,也是进入命令行窗口(cmd.exe 或 command.exe),切换路径到wxWidgets源代码所在目录下的 build/msw 子目录,只是执行的命令行是“mingw32-make -f makefile.gcc”。最终生成的库文件位于lib目录中。当然,编译之前可能需要设置一下,比如指定编译为动态库(DLL)还是静态库(LIB),或者是否采用UNICODE,等等,设置方式就是修改 build/msw 子目录中的 config.vc 或 config.gcc 文件。

VC6和MinGW相比,两者在编译速度,以及在编译后的文件的大小方面都有较大不同。根据我编译wxWidgets时所做的简单统计,VC6的编译速度比MinGW至少快一倍,VC6编译生成的动态库DLL文件比MinGW小一倍左右,VC6编译生成的静态库LIB文件比MinGW要大不少(大约是1.5倍)。下面的图片两者编译生成的文件大小的对比,左侧是VC6生成的,右侧是MinGW生成的,图一是编译生成动态库DLL的情况,图二是编译生成静态库LIB文件的情况:

总起来说,在Windows系统下,还是用VC编译比较合适,没办法的情况下才会选择MinGW。Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购)。它对于学习UNIX/Linux操作环境,或者从UNIX到Windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对Cygwin产生了兴趣。

Cygwin 提供一个UNIX 模拟 DLL 以及在其上层构建的多种可以在 Linux 系统中找到的软件包,在 Windows XP SP3 以上的版本提供良好的支持。

cygwin(cygwin使用教程)相关推荐

  1. java cygwin,cygwin和java

    i am new to cygwin..what are the normal steps that are followed while setting classpath and all for ...

  2. cygwin图文安装教程

    Cygwin 是 Windows 上类似于 Linux 的环境.它包括一个提供 UNIX 功能性基本子集的 DLL 以及在这之上的一组工具.安装好 Cygwin 之后,通常可以忽略它,即使您是命令行的 ...

  3. cygwin安装linux教程,Cygwin,让你拥有Windows下的Linux环境

    如何在Windows下拥有Linux环境,大多数同学会选择安装虚拟机,无可厚非呀,这里推荐使用VirtualBox.至于怎么安装虚拟机什么哒就不在今天讨论的范畴啦~~ 但是,老哥的电脑吃不消这虚拟机呀 ...

  4. Windows7下 Cygwin 离线安装教程

    一.下载离线安装包 从官网(https://cygwin.com/install.html)下载Cygwin离线包,根据自己系统要求进行选择是64为还是32位. 二.安装 ㈠.下载完成后找到下载的离线 ...

  5. cygwin mysql安装教程_Cygwin 下安装Python MySQLdb

    Cygwin 下安装Python MySQLdb 1) cygwin 更新 运行 cygwin/setup-x86_64.exe a 输入mysql,选择下面的包安装: libmysqlclient- ...

  6. OS + windows command / cmd / dos / Cygwin / UnxUtils / miniGW / powershell

    DOS 命令帮助文档 command line shell 用好windows的快捷键 http://www.pcfree.cn/cn/service/OS/windows/2004/09/04/ar ...

  7. MinGW/cygwin 快速开始

    文章目录 一.什么是 MinGW ? 1. 安装 MinGW-w64 二.什么是cygwin 1. Cygwin安装 1.1 安装过程 1.2 验证安装是否成功 1.3 Clion配置使用cygwin ...

  8. Cygwin环境的搭建

    什么是Cygwin Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购 ...

  9. Windows系统下多版本GCC的安装: MinGW Cygwin Msys2 和 VS: MSVC

    文章目录 MinGW 的下载和安装 Cygwin 的下载和安装 Babun的下载和安装 Msys2 的下载和安装 VS MSVC 的下载和安装 MinGW 只包括gcc和g++,不支持离线安装. Mi ...

最新文章

  1. DPDK 数据包捕获基本流程(十六)
  2. Servlet架构初解析
  3. mysql系列之5--完全备份和增量备份
  4. linux删除之前的文件日志
  5. 第一次接触终极事务处理——Hekaton
  6. php 动态加载JavaScript文件或者css文件
  7. Axiom3D:Ogre射线与点,线,面相交,鼠标操作3维空间.
  8. 水下等离子切割机行业调研报告 - 市场现状分析与发展前景预测
  9. 求数列的最大子段和java_十大经典排序算法(Java版本)
  10. w10系统asp服务器搭建,在windows10系统下搭建asp环境的方法
  11. 网站图片优化方法有哪些
  12. 将阳历转换为阴历php,php将阳历转换为阴历
  13. 【LeetCode】马三来刷题之Permutations
  14. 数据处理奇技巧——hive篇
  15. 想学明白PostgreSQL,得先捋一捋体系架构
  16. PHPoffice PHPword添加水印
  17. UGUI源代码之Image-Sliced模式
  18. 3029. 【NOIP2011DAY2】观光公交
  19. 电能计量芯片HLW8110/HLW8112
  20. 第07课:项目实战——自己动手写一个神经网络模型

热门文章

  1. 如何订阅《程序员》官方网站?
  2. 服务器春节微信创意文案,微信朋友圈春节的文案说说
  3. 电子网站导航 (zz http://blog.163.com/huanghuairen@126/blog/static/19577851200710192333382/)
  4. 一年中最后一个月的最后一天说说_一年最后一天怎么发朋友圈
  5. pyautogui 自动化 控制 Anydesk 远程桌面,无法键盘输入
  6. [IE编程] IE中对网页进行截图的编程接口
  7. 【多传感融合】优达学城多传感融合学习笔记(三)——将激光雷达3D点云映射到相机图像(上)
  8. 大小写 数据库 达梦_达梦数据库,大小写敏感这个参数怎么设置
  9. waves服务器系统包,Waves Complete 12
  10. 嵌入式Linux系统开发笔记(二)