各種Windows下面的gcc native build環境的比較

來源:互聯網
上載者:User

標籤:

http://i.rexdf.org/blog/2015/04/04/fa-xian-ge-xin-huan-jing-msys2/

最近注意到了一個新的Windows上面的類比Linux的項目。一般來說兩大主流陣營MingWCygwin,這兩個思路各不相同。相對來說 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環境的比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.