目前在Windows下GCC比較常用的移植版本就是MinGW和Cygwin。
MinGW
MinGw即Minimalistic GNU for Windows,某種程度上可以看做是win版本下的GCC。它是一個建立在GCC和binutils 項目上的編譯器系統。MinGW幾乎支持所有的Win32API,所連接的程序,不需要任何第三方庫就可以運行了。在某種程度上看,MinGW更像是VC的替代品。
相關名稱:
- MinGW是最先出來的,但是當時只有32位系統,所以支持32位系統;
- Mingw-w64 既支持64位,也支持32位,也支持32位和64位的交叉編譯;gcc官方支持Mingw-w64,所以更建議Mingw-w64.
- TDM-GCC: 32位的用的是Mingw,64位用的是MinGW64.
Cygwin
Cygwin 則是一個在Windows平臺上運行的unix模擬環境,是cygnus solutions 公司開發的自由軟件。Cygwin更像一個平臺,模擬了Linux的接口,提供了運行在它上面的程序使用,提供了很多Linux環境下的GNU軟件。
Cygwin其實并不是一個GCC。它是讓Windows擁有Unix-like環境的軟件,所以GCC自然也就會包含在里面。Cygwin和MinGW最大的區別在于,使用Cygwin可以在Windows下調用Unix-like的系統函數。比如進程函數等等。
綜合對比
1. MinGW 是讓Windows 用戶可以用上GNU 工具,比如GCC。Cygwin 提供完整的類Unix 環境,Windows 用戶不僅可以使用GNU 工具,理論上Linux 上的程序只要用Cygwin 重新編譯,就可以在Windows 上運行。
2.如果程序只用到C/C++ 標準庫,可以用MinGW 或Cygwin 編譯。如果程序還用到了POSIX API,則只能用Cygwin 編譯。
3.程序經MinGW 編譯后可以直接在Windows 上面運行。程序經Cygwin 編譯后運行,需要依賴安裝時附帶的cygwin1.dll。
使用對比
- Cygwin體量大,Mingw體量小
- Cygwin編譯后的exe需要cygwin1.dll作為支持,而Mingw不需要就可以直接運行,因為有中間層所以Cygwin慢,Mingw快。
- Cygwin包含的內容更全面,能編譯通過的linux源文件更多,Mingw能編譯通過的更少。
- 在一些IDE中,比如Clion,使用Mingw有煩人的回顯,而Cygwin沒有。
從執行速度上,我推薦在Windows下選擇使用MinGW64,當然使用VS的用戶不必選擇GCC。