cygwin和mingw的區別

以前因爲作一些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翻譯

相關文章
相關標籤/搜索