Cygwin、Msys、MinGW、Msys2的區別與聯繫(轉)

網上有不少文章講它們之間的區別與聯繫,初學者看的一頭霧水,在知乎上看到這篇文章講的很清楚,容易理解。

在講區別聯繫以前,咱們先看一下這幾個東東的前世此生。



Cygwin,原 Cygnus 出品(已被紅帽收購),目前是 RedHat 名下的項目。項目的目的是提供運行於 Windows 平臺的類 Unix 環境(以 GNU 工具爲表明),爲了達到這個目的,Cygwin 提供了一套抽象層 dll,用於將部分 Posix 調用轉換成 Windows 的 API 調用,實現相關功能。這裏面最典型的,最基本的模擬層就是那個 cygwin1.dll。除此以外,隨着 Linux 系統的發展壯大,目前的 Cygwin 已經不只僅提供 POSIX 兼容,所以也順帶多了更多模擬層的依賴關係。

Cygwin 的目錄結構基本照搬了 linux 的樣子,但同時,也兼容了 Windows 的許多功能:大部分應用使用 Unix 風格的路徑,Windows的盤符經過相似掛載點的方式提供給 Cygwin 使用;Cygwin 中既能夠運行 Cygwin 的應用(依賴模擬層),又能夠運行 Windows 應用,而傳遞給應用的路徑會通過它的模擬層變換,以此保證程序運行不會出錯。

因爲它的模擬層實現了至關良好的 Posix 兼容,人們試着將許多重要的 Linux/BSD 應用移植到了Cygwin下,使得Cygwin愈來愈大,功能也愈來愈豐富,以致於目前不少人直接把將Linux應用移植到Windows平臺的任務都交給了Cygwin(固然,這種移植並不是原生)。事實上,Cygwin誕生之初,本就是想經過GCC編譯出Windows應用來,由於bootstrap GCC而順帶搞了一坨別的東西過來,最後發展到如今的。

小結:Cygwin是運行於Windows平臺的POSIX「子系統」,提供Windows下的類Unix環境,並提供將部分 Linux 應用「移植」到Windows平臺的開發環境的一套軟件。按照我常常開玩笑的話來說,Cygwin 基本上就是傳說中的 GNU/NT 系統(對照 GNU/Linux,GNU/BSD,GNU/HURD)。



MinGW, Minimalist GNU for Windows,用於開發原生(32位) Windows 應用的開發環境。它主要提供了針對 win32 應用的 GCC、GNU binutils 等工具,以及對等於 Windows SDK(的子集)的頭文件和用於 MinGW 版本 linker 的庫文件(so、a等,而不是 VC 的 lib)。

MinGW 可以替代 cl 用於編譯不包含 MFC 的、以 WinSDK 爲主的 Windows 應用,而且編譯出來的應用不依賴於第三方的模擬層支持,其運行時爲大部分 Windows 標配的 msvcrt(故稱原生 Windows 應用)。除此以外,MinGW 也支持 GCC 支持的其餘語言。

由於這些緣由,MinGW 被許多 Linux 上發展起來的開發工具選擇爲 Windows 版本的默認編譯器,例如 CodeBlocks,例如 DevC++。

小結,MinGW 是用於進行 Windows 應用開發的 GNU 工具鏈(開發環境),它的編譯產物通常是原生 Windows 應用,雖然它自己不必定非要運行在 Windows 系統下(是的 MinGW 工具鏈也存在於 Linux、BSD 甚至 Cygwin 下)。



MSYS,因爲 MinGW 自己僅表明工具鏈,而在 Windows 下,因爲那個shi同樣的cmd,以及配套的命令行工具不夠齊全(也不舒服),所以,MinGW 開發者從曾經比較舊的 Cygwin 建立了一個分支,也用於提供類 Unix 環境。但與 Cygwin 的大而全不一樣,MSYS 是衝着小巧玲瓏的目標去的,因此整套 MSYS 以及 MinGW,主要以基本的 Linux 工具爲主,大小在 200M 左右,而且沒有多少擴展能力。

MSYS 是用於輔助 Windows 版 MinGW 進行命令行開發的配套軟件包,提供了部分 Unix 工具以使得 MinGW 的工具使用起來方便一些。若是不喜歡龐大的 Cygwin,並且使用很少,能夠試試。不過喜歡完總體驗、不在意磁盤佔用等等,仍是推薦 Cygwin 而不是 MSYS。



MinGW-w64,前面提到的 MinGW,是針對 32 位 Windows 應用開發的。並且因爲版本問題,不能很好的支持較新的 Windows API。MinGW-W64 則是新一代的 MinGW,支持更多的 API,支持 64 位應用開發,甚至支持 32 位 host 編譯 64 位應用以及反過來的「交叉」編譯。除此以外,它自己也有 32 位和 64 位不一樣版本,其它與 MinGW 相同。



MSYS2,因爲 MinGW 萬年不更新,MSYS 更是,Cygwin的許多新功能 MSYS 沒有同步過來,因而 Alex 等人創建了新一代的 MSYS 項目。仍然是 fork 了 Cygwin(較新版),但有個更優秀的包管理器 pacman,有活躍的開發者跟用戶組,有大量預編譯的軟件包(雖然確定沒有Cygwin多)……對於不喜歡龐大的 Cygwin 的用戶而言,推薦試試 msys2。



區別(小結):Cygwin是模擬 POSIX 系統,源碼移植 Linux 應用到 Windows 下;MinGW 是用於開發 Windows 應用的開發環境。
聯繫:均提供了部分 Linux 下的應用,多跑在 Windows 上;MinGW 做爲 Cygwin 下的軟件包,能夠在 Cygwin 上運行。
 
聲明:本文章轉自知乎,若有侵犯,請告知刪除。
做者:LiTuX 連接:https://www.zhihu.com/question/22137175/answer/90908473 來源:知乎
相關文章
相關標籤/搜索