以前因为作一些JNI的开发,安装了MinGW,最近有个项目须要用到cygwin,因而就有个疑问,这两个东西有什么区别?在网上看了些资料,在这里复制粘贴一下,以备后查。windows
Unix下编译经过的C代码,在win32下编译是不能经过的 ,固然Unix 和win32的API都是符合标准C,也就是说,大多数函数调用在unix和win32下是相同的.可是,unix有本身一些独特的API(如fork,spawn,signals,select,sockets等),若是代码中使用了这些API,在win32下固然找不到对应的库.socket
可是,这些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上的编译器。spa
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是更好的选择。.net
原文连接:http://blog.csdn.net/embededvc/article/details/6829010翻译