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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cygwin 和MinGW 的区别与联系是怎样的相关的知识,希望对你有一定的参考价值。

参考技术A 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是用一个dll模拟linux环境来“欺骗”应用程序,好像自己运行在linux环境下;而mingw是在编译时提供linux到windows必要代码的“翻译”转换,用到的还是windows运行时库。
在cygwin下编译出来的程序需要cygwin.dll才能在windows下运行,源码拿到linux环境下重新编译就可以在linux下跑起来;mingw环境下编译出来的程序,只能在windows下跑,源码在linux环境下编译多半通不过。

mingw和cygwin区别


minGW与cygwin

==========================

首先MingW和cygwin都可以用来跨平台开发。  

MinGW是Minimalistic GNU for Windows的缩写,也就是Win版的 精简的GCC 。  

MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU( http://www.gnu.org/ )的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。

Microsoft的有一套unix的子系统的开发环境,不过只是一个posix子集,linux的许多函数不能用,当然fork没问题。


Cygwin则是 全面模拟 了Linux的接口,提供给运行在它上面的的程序使用,并提供了大量现成的软件,更像是一个平台。  

相对的MingW也有一个叫MSYS(Minimal system)的子项目,主要是提供了一个模拟Linux的Shell和一些基本的Linux工具。因为编译一个大型程序,光靠一个GCC是不够的,还需要有Autoconf等工具来配置项目,所以一般在Windows下编译Linux下的大型项目都是通过MSYS来完成的,当然MSYS只是一个辅助环境,根本的工作还是MingW来做的。



用MingW和cygwin编译出来的程序的区别

===================================  

首先,MingW和cygwin都不能让Linux下的程序直接运行在Windows上,必需通过源代码重新编译。  

现代操作系统包括Windows和Linux的基本设计概念像进程线程地址空间虚拟内存这些都是大同小异的,之所以二者上的程序不能兼容,主要是它们对这些功能具体实现上的差异,

首先是可执行文件的格式,Window使用PE的格式,并且要求以.EXE为后缀名。Linux则使用ELF。

其次,操作系统的API也不一样,如Windows用CreateProcess()创建进程,而Linux使用fork()。


所以要移植程序必然要在这些地方进行改变,


MinGW的方案:

来把代码中Linux下的系统调用API直接 替换 修改成对应的Windows下的API。所以生成的执行文件已经 看不到linux的系统调用api 。


Cygwin方案:

Cygwin通过 cygwin1.dll 这个动态库 实现两个平台API的转换 。Cygwin生成的程序依然有fork()这样的Linux系统调用API, 只不过在cygwin1.dll实现到Windows功能的转换。

 

用Mingw编译的程序性能会高一点,而且也不用带着那个接近两兆的cygwin1.dll文件。


【综上所述】

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

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


本文出自 “清风徐来” 博客,请务必保留此出处http://cui918.blog.51cto.com/5884562/1877382

以上是关于Cygwin 和MinGW 的区别与联系是怎样的的主要内容,如果未能解决你的问题,请参考以下文章

MingW和cygwin的区别(转)

Cygwin和MinGW有什么区别?

mingw和cygwin的区别

cygwin和mingw的区别

Msys/MinGW与Cygwin/gcc

我的cygwin怎么用不了?