原創 by zoe.zhang
..........................................................php
1. windows與Linux操做系統的不一樣
windows和Linux是目前來講最流行的兩大操做系統,在基本設計概念上,進程、線程、尋址、內存管理等方面都是大同小異的,可是兩者之間的程序不兼容,由於兩者在系統功能上是不一樣的,提供的系統API也是不一樣的。
從最明顯的幾點來講:linux
- 可執行文件的格式,Windows採用的是PE的格式,要求以.exe爲後綴名,而Linux使用的是 elf 的格式;
- 操做系統提供的系統API是不一樣的,如Windows使用CreateProcess()建立進程,而Linux使用fork()。
因此想要在Windows環境下使用Linux的編譯工具,也就是gcc/g++,咱們須要一箇中間的轉換工具或者平臺,這也就是MinGW和cygwin存在的緣由。
2. 什麼是 MinGW
- MinGw全稱 Minimalistic GNU for Windows,某種程度上能夠看作是win版本下的GCC。Mingw有一個Msys的子項目,能夠提供一些模擬Linux的shell和基本的Linux工具,Msys是一個輔助環境。
- MinGw 有專門的Win32 API的頭文件,來把代碼中Linux方式的系統調用替換爲對應的Windows下的調用方式,某種程度上能夠稱之爲將Linux調用 翻譯爲 Windows調用。
3. 什麼是 cygwin
- Cygwin 則是一個在Windows平臺上運行的unix模擬環境,是cygnus solutions 公司開發的自由軟件。Cygwin更像一個平臺,模擬了Linux的接口,提供了運行在它上面的程序使用,提供了不少Linux環境下的GNU軟件。
- Cygwin 經過Cygwin1.dll的文件實現操做系統API的轉換,模擬了Linux的調用接口給程序,程序以Linux的方式調用系統API,但這個API的目標庫是Cygwin1.dll,Cygwin1.dll再調用Windows對用的方式實現,再把結果返回給程序。
4. 二者的區別
- MinGW生成的程序,究其本質調用的是Kernel.32導出的標準Windows系統API,在windows下Mingw的編譯性能會高一些,編譯速度也會快一些。
- Cygwin更像一個平臺,它相對完整地模擬了LInux,提供了一個接近2M的Cygwin1.dll的文件做爲目標庫,來模擬Linux系統的接口,可是相對來講編譯的速度就要慢一些。若是想要在Windows上開發能夠運行在LInux上的程序,應該選用Cygwin。
總的來講:shell
- cygwin大,mingw小
- cygwin編譯後的exe須要cygwin1.dll做爲支持,而mingw不須要就能夠直接運行,由於有中間層因此cygwin慢,mingw快。
- cygwin包含的內容更全面,能編譯經過的linux源文件更多,mingw的min是minimalist因此能編譯經過的更少。但,不是所有,就是說別期望你能夠把任何爲linux寫的源代碼在cygwin或mingw編譯經過並運行。
5. MinGW、MinGw-w6四、TDM-GCC
- MinGW是最早出來的,可是當時只有32位系統,因此支持32位系統;
- Mingw-w64 既支持64位,也支持32位,也支持32位和64位的交叉編譯;gcc官方支持Mingw-w64,因此更建議Mingw-w64.
- TDM-GCC: 32位的用的是Mingw,64位用的是MinGW64.
- 此外還有一個IDE,CodeBlock,使用 起來相對簡單,具備較強的跨平臺性,比較適合不習慣使用命令行的新手。
6. 總結
事實上,cygwin/gcc和Mingw都是爲了gcc能夠在windows下使用的編譯環境,能夠方便進行一些類Linux環境下的編程。可是兩種平臺無論是哪種,Linux程序都不能直接運行在Windows下的,須要對程序進行從新編譯,同時建議重要的源碼仍是應該在真正的Linux環境下進行編譯。編程
基於執行速度還有大小的緣由,我傾向於在Windows下選擇使用MinGW64.windows
附;Mingw-w64的環境搭建
- 下載安裝包,並安裝,注意安裝時的一些setting 參數。
- 配置環境變量:環境變量輸入安裝的地址 ..\Mingw64\bin。
- 驗證配置是否成功:打開cmd命令行,輸入gcc -v。