標籤:
http://i.rexdf.org/blog/2015/04/04/fa-xian-ge-xin-huan-jing-msys2/
最近注意到了一個新的Windows上面的類比Linux的項目。一般來說兩大主流陣營MingW與Cygwin,這兩個思路各不相同。相對來說 MingW效能比較好,儘可能用WinAPI替代實現。Cygwin則是添加了一個層,利用很多dll來類比Linux的那些syscall(典型的如 fork)。所以cygwin程式一般都是需要有cygwin的dll在path裡面才可以運行。MingW缺點是很多程式沒法編譯,如果沒有專門為 MingW設計的程式,基本上MingW是編譯不出來的。Cygwin缺點是會比較慢。
另外注意一下環境變數。MingW的環境變數path轉換比較簡陋很多情況下會有問題。cygwin環境下面有cygpath.exe這個工具來迴轉化(我就是用它hack了一下在cygwin的Mintty下面能運行調用nodejs處理部落格壓縮)。另外cygwin的path是Unicode的,偶爾會出現目錄過深,windows資源管理員和rd /s 都刪不掉的超長路徑檔案,rm -rf可以在Windows下面輕易刪除。
msys本來是MingW的基本shell環境,從MingW項目沒落之前很久就沒更新過了。
msys2是完全不同的項目。下面會詳細給出參考。在此之前我們來看看各種Windows下面的gcc native build環境的比較。
在此之前提醒一下,大部分MingW系列都是官網加SourceForge.net託管二進位的模式,所以有兩個主要官網.
MinGW/msys 1.0:
MinGW的官網是http://www.mingw.org/。
MingW裡面內建一個msys 1.0,這個比較經典,但是太老了,如果需要gcc 3.4.4與GNU Make 3.81搭配。很多最近的github與svn checkout都會編譯失敗。基本上除了學習csapp以外沒有任何其他用途(它與CSAPP裡面例子編譯結果一致)。如果要用/bin/gcc就是msys的的古董gcc,因為MinGW的PATH裡面/mingw/bin在/bin前面。
MingW
還算在更新從http://sourceforge.net/projects/mingw/上看最後一次更新是2014年12月。估計是某個包的補丁而已。
MinGW-w64
官網http://mingw-w64.yaxm.org,二進位檔案官網http://sourceforge.net/projects/mingw-w64/。
應該是MinGW的後續了。一個典型的下載目錄是http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-win32/seh/,這樣的結構。理論上應該更新最好的,是從Linux版本的MinGW編譯出的Windows版本。這個是目前正規血統的MinGW項目,雖然是構建Windows的exe和dll檔案,但是它能力最大發揮在Linux平台上。支援win7/8/8.1的API。被ffmpeg,GTK+,OpenSSL,wxWidgets,Perl,phreads,KDE Software Collection,GIMP,Blender,The R Project for Statistical Computing等項目所使用。但是Windows版本各種bug吧。
MinGW-builds
被廢棄的官網https://code.google.com/p/mingw-builds/.
二進位檔案官網http://sourceforge.net/projects/mingwbuilds/.
似乎是俄羅斯人開發的,目前似乎停止開發了,已有的發行版gcc 4.6.2-4.8.1。一些feature如下(我也不懂直接複製了)。
OpenMPLTOGraphitestd Thread support librarystd Atomic operations libraryNative TLS CallbacksWide-Character Startup (-municode)32-bit and 64-bit WindowsMultilib toolchainsCross-compiling from x86_64 for i686 and vice versa
Win-builds
官網是http://win-builds.org/.
它需要依附在MinGW或者Cygwin的shell環境下,Linux下也有一個版本。最新是4.8.3版本。
這個比較穩定,其整合了Qt, Curl, EFL, freetype, GTK+, lua, openssl, sqlite, wget, zlib…等等92個庫。支援Windows和Linux,感覺如果是做開發,這個好像是個不錯的選擇。
tdm-gcc
官網是http://tdm-gcc.tdragon.net/.
這個還是比較個性和實用的選擇。它預設選用的posix,這個可能會引起一些問題。但是wxWidgets官網推薦的編譯器就是它,另外一部分人喜歡的Dev-CPP的後續開發版本orwelldevcpp也是用的它。可見其定製還是有一定合理性的。
更新較快最新已經更新到4.9.2了。
Cygwin
這個不用在這裡多說,社區很活躍,發郵件很快就有人回複。軟體更新也很頻繁。這裡說下mirror,除了163等。阿里也有mirror,http://mirrors.aliyun.com/,速度會比較快。但是注意,添加mirror有技巧。首先複製的目錄應該是http://mirrors.aliyun.com/cygwin不能帶最後的那個/,其次添加之後需要首先隨手點擊一下其他的,然後再點擊剛剛添加的阿里才可以,手動換其他的源也是這樣。
msys2
官網http://msys2.github.io 可能在目前github的一系列事件有關,國內沒法直接開啟.二進位檔案官網http://sourceforge.net/projects/msys2/.
一個簡介.
兩個關鍵的github repo:
https://github.com/Alexpux/MSYS2-packages
https://github.com/Alexpux/MINGW-packages
如果想自己從源碼編譯可以用他的patch。實際上SourceForge.net上面的就是用他的patch編譯出來的。
另外就是它採用了我最喜歡的ArchLinux的pacman -Syu。簡直棒到不行。但是略微有點小問題就是需要rebase,還好它比cygwin自動化一些,直接執行根目錄裡面的autorebase.bat即可。
我發現他的github裡面有很多在所有其他地方沒見過的包,比如nodejs(nodejs官網的win版本在cygwin的shell下面會找不到正確的目錄,直接拒絕執行,這會導致很多需要用nodejs的命令列項目無法編譯以及使用)。
一個國內的二進位mirror: MSYS2 鏡像使用協助.
結束語
最後說一下國人據說很有前途的flinux的包管理也是基於pacman的,看來大家都是比較喜歡pacman的了。
各種Windows下面的gcc native build環境的比較