標籤:
MinGW和Cygwin都解決了C++跨平台交叉編譯的問題,使Linux下的程式在Windows上編譯運行成為可能。
MinGW給習慣在Linux上開發的人員在windows上提供了一套類似的工具集;Cygwin主要是對於在Linux的程式,無需改動代碼即可移植到windows上;gnuwin32主要是對習慣linux工具的人員,在windows上提供一套類似的命令。
Unix下編譯通過的C代碼,在win32下編譯是不能通過的 ,當然Unix和win32的API都符合標準C,即大多數函數調用在unix和win32下是相同的.但unix有自己一些獨特的API(如fork,spawn,signals,select,sockets等),如果代碼中使用了這些API,在win32下當然找不到對應的庫。但這些API的功能在win32中也能實現,下面提供兩種讓window編譯Unix風格代碼的方法:
- 修改編譯器,讓window下的編譯器把諸如fork的調用翻譯成等價的形式,這就是MinGW的做法
- 修改庫,讓window提供一個類似unix提供的庫,它們對程式的介面如同unix一樣,而這些庫是由win32的API實現的,這就是Cygwin的做法
MinGW
MinGW, a contraction of "Minimalist GNU for Windows", is a minimalist development environment for native Microsoft Windows applications.
MinGW provides a complete Open Source programming tool set which is suitable for the development of native MS-Windows applications, and which do not depend on any 3rd-party C-Runtime DLLs.
MinGW給在習慣在Linux開發的人員提供了一套在Windows上開發類似Linux的工具集,它包括一系列軟體:編譯工具、連結工具、轉儲工具、調試工具和其它開發工具等。MinGW還提供一些開源的基礎支援庫,像GNU的C/C++ RT庫(libc、libstdc++),POSIX的基本調用介面(包括pthread),甚至還有OpenGL和Windows API的調用介面等。幾乎所有MinGW中的軟體都是從GNU項目或Linux下移植到Windows下的。
與GNU不同的是,MinGW編譯產生的是Windows下的可執行檔(.exe)或庫檔案(.dll,.lib),不過編譯過程中的的中間檔案仍然是.o檔案,而不是.obj檔案。
MinGW的POSIX介面遠沒有Cygwin實現的那麼全面(如:連BSD/Linux Socket都沒有,只能用Winsock),所以MinGW只是用來開發Windows專屬應用的工具集。
後來MinGW有了一個子項目叫:MSYS,其中包括了更多的Linux工具,其目標類似Cygwin:構建一套Windows下的Linux類比環境。
MSYS, a contraction of "Minimal SYStem", is a Bourne Shell command line interpreter system. Offered as an alternative to Microsoft‘s cmd.exe, this provides a general purpose command line environment, which is particularly suited to use with MinGW, for porting of many Open Source applications to the MS-Windows platform; a light-weight fork of Cygwin-1.3, it includes a small selection of Unix tools, chosen to facilitate that objective.
註:MinGW官網:http://www.mingw.org/
Cygwin
Cygwin is:
- a large collection of GNU and Open Source tools which provide functionality similar to a Linux distributionon Windows.
- a DLL (cygwin1.dll) which provides substantial POSIX API functionality.
Cygwin 名字來源於GNU、Cygnus、Windows三者的縮寫。Cygwin的目標是:構建一套Windows下的Linux類比環境。因此,Cygwin是一個龐大的項目,不只包括Linux下的開發環境,也包括工作環境和各種各樣的Linux下的軟體。
在早期,Cygwin的核心是cygwin1.dll,可以認為它是一個POSIX介面的實現,依靠這個動態連結程式庫,Unix/Linux下的軟體可以很容易的移植到Windows下,並且風格保持原有的不變。不過,隨著Cygwin的發展,越來越多的Unix/Linux程式的移植,建立基於Cygwin的複雜程式依賴的庫也越來越多,現在裝完預設配置的Cygwin後,就會發現有很多cyg打頭的動態連結程式庫。
註:
Cygwin官網:http://www.cygwin.com/
Cygwin中文網:http://www.cygwin.cn/
GnuWin32
GnuWin32使windows使用者可以在命令列視窗中使用各種各樣的linux命令,就跟使用普通的windows命令一樣簡單。
註:GnuWin32官網:http://gnuwin32.sourceforge.net/
MinGW & Cygwin