比較MingW與Cygwin(搜集) - 姚中凱的日誌 - 網易博客

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下等價的形式。同時這個程序是不能在linux下運行的。說白了,如果你是想在windows環境下開發linux運行程序,那麼CygWin/gcc是你的不二之選。而如果你想開發的是windows運行程序,並且追求速度,那麼二者相比而言,MinGW是更好的選擇

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

cygwin/gcc和MinGW都是gcc在windows下的編譯環境,但是它們有什麼區別,在實際工作中如何選擇這兩種編譯器?。cygwin/gcc完全可以和在linux下的gcc化做等號,這個可以從boost庫的劃分中可以看出來端倪,cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets。所以完全可以和linux一起同步更新gcc版本,而不用擔心問題,並且在cygwin/gcc做的東西(不用win32的)可以無縫的用在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是不是以後的編譯性能會提高很多呢?有機會一定要測試一下了,呵呵。一個技巧:如何知道當前版本的gcc的安裝配置,用命令:gcc -v就可以了,呵呵。
推薦閱讀:

身體比較胖的糖尿病人,適合用這類降糖葯
如何有針對性地選擇比較適宜的紫砂壺
用比較法讓學生找規律進行識字
比較盤透視親密關係
康君:幸福指數研究的不同視角及國際比較

TAG:網易 | 比較 | 博客 | Cygwin | 網易博客 | 日誌 |