MinGw 和 cygwin 的區別和聯系


原創 by zoe.zhang

..........................................................

1. windows與Linux操作系統的不同

    windows和Linux是目前來說最流行的兩大操作系統,在基本設計概念上,進程、線程、尋址、內存管理等方面都是大同小異的,但是二者之間的程序不兼容,因為二者在系統功能上是不同的,提供的系統API也是不同的。
  從最明顯的幾點來說:

  • 可執行文件的格式,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。
  • 總的來說:
    1. cygwin大,mingw小
    2. cygwin編譯后的exe需要cygwin1.dll作為支持,而mingw不需要就可以直接運行,因為有中間層所以cygwin慢,mingw快。
    3. cygwin包含的內容更全面,能編譯通過的linux源文件更多,mingw的min是minimalist所以能編譯通過的更少。但,不是全部,就是說別指望你可以把任何為linux寫的源代碼在cygwin或mingw編譯通過並運行。

5. MinGW、MinGw-w64、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.

附;Mingw-w64的環境搭建

  • 下載安裝包,並安裝,注意安裝時的一些setting 參數。
  • 配置環境變量:環境變量輸入安裝的地址 ..\Mingw64\bin。
  • 驗證配置是否成功:打開cmd命令行,輸入gcc -v。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM