【轉】Msys/MinGW與Cygwin/gcc

一 MinGW
        MinGW 官方網站爲  http://www.mingw.org/      
        MinGW,即 Minimalist GNU For Windows(GCC compiler suite)。它是一些頭文件和端口庫的集合,該集合容許人們在沒有第三方動態連接庫的狀況下使用 GCC(GNU Compiler C)產生 Windows32 程序。
 
        MinGW:一個可自由使用和自由發佈的Windows特定頭文件和使用GNU工具集導入庫的集合,在基本層,MinGW 是一組包含文件和端口庫,其功能是容許控制檯模式的程序使用微軟的標準C運行時間庫(MSVCRT.DLL),該庫在全部的 NT OS 上有效,在全部的 Windows 95 發行版以上的 Windows OS 有效,使用基本運行時,你可使用 GCC 寫控制檯模式的符合美國標準化組織(ANSI)程序,可使用微軟提供的 C 運行時擴展。該功能是 Windows32 API 不具有的。下一個組成部分是 w32api 包,它是一組可使用 Windows32 API 的包含文件和端口庫。與基本運行時相結合,就能夠有充分的權利既使用 CRT(C Runtime)又使用 Windows32 API 功能。
 
       實際上 MinGW 並不只是一個 C/C++ 編譯器,而是一套 GNU 工具集合。除開 GCC (GNU 編譯器集合) 之外,MinGW 還包含有一些其餘的 GNU 程序開發工具 (好比 gawk bison 等等)。
 
       開發 MinGW 是爲了那些不喜歡工做在 Linux(FreeBSD) 操做系統而留在 Windows 的人提供一套符合 GNU 的 GNU 工做環境。因此,使用 MinGW 咱們就能夠像在 Linux 下同樣使用 GNU 程序開發工具。
 
      GCC 就是 MinGW 的核心所在,GCC 是一套支持衆多計算機程序語言的編譯系統,並且在語言標準的實現上是最接近於標準的。而且 GCC 幾乎能夠移植到目前全部可用的計算機平臺。
 
      GCC 自己不像VC那樣擁有IDE界面(可是有不少的開源的IDE支持使用MinGW,例如codeblocks,eclipse等)。源代碼編輯你能夠選用任何你喜歡的文本編輯器(聽說微軟的開發人員包括 VC 的開發都不用 VC 所帶的 IDE 編輯器,而是選用 GNU 的 VIM 編輯器)。而後使用 make 等工具來進行軟件項目的編譯、連接、打包乃至發佈。而像 cvs(svn) 源代碼版本控制工具可讓世界上任何一個角落的人均可以參與到軟件項目中來。
 
關於 MFC,微軟基礎庫類,這個隨 VC++ 攜帶的一個源代碼公開的開發包,和其餘 Windows 程序開發包是同樣的。若是有 VC++ 的受權,你徹底可使用 MFC 的源代碼,也就是你使用 GCC 來編譯 MFC 程序是徹底能夠的。
 
固然,GNU 下也有不少 Windows 程序開發包,甚至有一些是支持跨平臺使用的。不只僅能夠直接把源代碼編譯爲 Windows 程序,也能夠不經修改編譯爲其餘操做系統的圖形程序。
 
二 MSYS 
       官方網站爲  http://www.mingw.org/ 
       MSYS:Unix-like command line utilities,包括基本的bash, make, gawk and grep 等等。一般也能夠認爲是小型的UNIX on Windows。提供在windows上模擬Unix環境來使用MinGW。
 
       MSYS在windows下模擬了一個類unix的終端,它只提供了MinGW的用戶載入環境,在MSYS模擬的unix環境下使用MinGW,就像在Unix使用gcc同樣。
 
三 cygwin/gcc
       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,能夠解決不少的問題。
 
四 總結
      MinGW是windows版本的gcc集合,不須要依賴中間層。
      MSYS是小型的linux的環境的模擬,能夠與MinGW結合來模擬linux環境下使用MinGW的gcc。
      Cygwin是功能強大的linux環境,因爲有cygwin1.dll實現了底層的windows api到linux api的轉化。因此在Cygwin裏開發就至關於在linux上開發,對於開發人員來講就至關於調用linux類型的api,因此這樣開發的程序也能夠直接移植到linux上。可是若是這樣的程序要在windows上執行的話,運行時必需要cygwin1.dll支持。
 
      根據以上的分析,若是在windows開發linux跨平臺的程序,linux模擬器Cygwin以及所包含的gcc是很好的選擇,可是開發的程序必須依賴一個cygwin1.dll。若是你只是想在windows下使用gcc編譯器也不想依賴其餘的dll,mingw是很好的一個選擇。
相關文章
相關標籤/搜索