這些工具你中有我,我中有你,容易混淆。
始于Cygwin
長久以來,Windows上不能直接使用Linux命令。想要學(xué)習(xí)Linux、POSIX、Bash等,往往必須安裝虛擬機或者雙系統(tǒng)。
Cygwin改變了這個局面??梢哉f,Cygwin提供了一個環(huán)境,讓W(xué)indows用戶能夠?qū)W習(xí)Linux、Bash,也能使用GCC編譯原本運行在Linux上的程序。它最初是Cygnus工程師Steve Chamberlain發(fā)起的一個項目。
Cygwin是許多自由軟件的集合,最初由Cygnus Solutions開發(fā),用于在各種版本的Microsoft Windows上運行類UNIX系統(tǒng)。Cygwin的主要目的是通過重新編譯,將POSIX系統(tǒng)(例如Linux、BSD以及其他Unix系統(tǒng))上的軟件移植到Windows上。
Cygwin始于1995年。目前Cygwin由Red Hat等負責(zé)維護。
Cygwin本質(zhì)上是在Windows上創(chuàng)建了一層Linux、POSIX兼容層(通過Windows的動態(tài)鏈接庫DLL),然后將其他Linux軟件重新編譯成EXE可執(zhí)行文件。
因此,在這個環(huán)境中編譯的程序仍然依賴Cygwin的DLL庫才能運行。也就是說,發(fā)布自己編譯的程序時,要同時把Cygwin的核心DLL一并打包。
MinGW
MinGW是Minimalist GNU for Windows的縮寫。MinGW的設(shè)計目標是對標MSVC開發(fā)環(huán)境,提供一個獨立的GNU風(fēng)格C/C++開發(fā)環(huán)境,用來編譯Windows應(yīng)用程序或者交叉編譯其他平臺的程序。
MinGW的核心是一個C/C++編譯器,基于GCC(GNU Compiler Collection)。MinGW提供了一個Windows API的頭文件集合和庫文件,使得開發(fā)者可以使用GCC編譯器來創(chuàng)建原生的Windows應(yīng)用程序。
與Cygwin相比,MinGW不提供一個完整的POSIX兼容層,而是直接使用Windows API進行開發(fā)。這意味著使用MinGW編譯的程序通常依賴的是libstdc++等GNU庫。
MSYS2
MSYS2算是Cygwin的繼任者,提供了一個更現(xiàn)代化的環(huán)境。MSYS2引入了包管理器工具pacman,使MSYS2環(huán)境中的軟件安裝體驗更接近Linux上的包管理器,極大簡化了軟件的安裝和更新過程。
MSYS2不止一種環(huán)境。實際上,MSYS2同時包含了類似Cygwin、MinGW 32、MinGW 64以及更現(xiàn)代的UCRT環(huán)境等多種環(huán)境。
安裝MSYS2,在很大程度上也相當(dāng)于安裝了MinGW。
MinGW的安裝實際上也依賴MSYS2,因為MinGW本身的核心是GCC編譯器,而環(huán)境工具等仍然復(fù)用MSYS2中的工具。
共同點是,這些工具都使用同一個終端模擬器mintty。