MinGW、MinGW-w64 簡介
MinGW(全稱爲,Minimalist GNU for Windows),它實際上是將經典的開源 C語言編譯器 GCC 移植到了 Windows 平臺下,並且包含了 Win32API ,因此可以將源代碼編譯爲可在 Windows 中運行的可執行程序。而且還可以使用一些 Windows 平臺不具備的,但是Linux平臺具備的開發工具和API函數。用一句話來概括就是:MinGW 就是 GCC 的 Windows 版本 。
MinGW-w64原本是MinGW項目的分支,後來成爲獨立發展得項目,由於僅有MinGW-w64被GCC官方所支持, 而MinGW早已停止更新, 因此推薦使用MinGW-w64。
MinGW-w64 與 MinGW 的區別在於 MinGW 只能編譯生成32位可執行程序,而 MinGW-w64 則可以編譯生成 64位 或 32位 可執行程序。
獲取MinGW-w64
MinGW-w64官網:http://mingw-w64.org/doku.php/start
本人下載的是v7.0.0版本的,也是目前最新版的,發佈日期:2019-11-10。
下載鏈接:https://sourceforge.net/projects/mingw-w64/files/
下載最新版的鏈接:https://sourceforge.net/projects/mingw-w64/files/latest/download
我們在Windows系統下可以選擇在線安裝的方式,對應下載的文件是:MinGW-W64-install.exe 。
<說明> mingw-w64-install.exe 安裝文件,它本質上是一個下載程序,會根據我們之後的一些設置,選擇性的下載相應的組件,並將它們組織在一起。所以,運行前要確定網絡通暢,而且你有足夠的時間,因爲根據你的網速,它可能需要花費一定的時間來下載。
操作:用鼠標雙擊運行 mingw-w64-install.exe 。
注意:如果出現無法運行,或者安裝出錯,你可以右鍵點擊它,並在彈出窗口中選擇“以管理員身份運行”選項,重新運行 mingw-w64-install.exe ,基本可以解決大部分問題。
安裝MinGW-w64
方式1—在線安裝
一、以“管理員身份運行” mingw-w64-install.exe 文件,它會從服務器獲取MinGW-w64 信息。
說明:這裏程序正在鏈接服務器,以便獲取存儲在倉庫中的 MinGW-w64 的文件信息。
操作:只需等待。
二、MinGW-w64 版本選擇,如下圖所示:
說明:在這個界面上,可以根據所要搭建的開發環境,選擇對應的選項,從而下載所需的組件。
操作:依次選擇 Version、Architecture、Threads、Exception、Build revision 下拉列表中適當的選項,接下來將會詳細介紹這些選項。
version
version選項:指的是你選擇的GCC編譯器的版本,我選擇的是當前最新版本8.1.0,一般建議選擇最新的版本。
操作:選中 8.1.0即可。
Architecture
Architecture選項:指的是你的電腦的系統類型,i686表示的是32位的系統類型,x86_64表示的是64位的系統類型。我本人的電腦是64位的系統類型,所以選中x86_64。
Threads
Threads選項:指的是線程模型,posix/win32。
說明:
(1)POSIX(Portable Operating System Interface,可移植操作系統接口),它是UNIX系統的一個API設計標準,很多類UNIX系統也在支持兼容這個標準,如Linux操作系統。
(2)Win32,它是Windows系統下一個API設計標準,如果你是開發Windows平臺下的應用程序,就需要選擇Win32。
操作:本人是在Windows下開發Linux應用程序,所以選擇的是:posix。
Exception
Exception選項:指的是異常處理模型。i686系統架構有2種選擇:dwarf 和 sjlj。x86_64系統架構也有2種選擇:seh 和 sjlj。由於我選擇的是64位的系統架構,所以可供選擇的異常處理模式是:seh 和 sjlj。下面說明sjlj, seh, dwarf三者的區別:
在C++中有 try..throw..catch,當它執行這種結構時,它需要保存現場還原現場,而 sjlj, seh, dwarf 正是實現這類過程的三種方式。
sjlj 全稱是 SetJump / LongJump,前者設還原點,後者跳到還原點。可用於32位或者64位系統。
seh (Structured Exception Handling,結構化異常處理) 是 Borland 公司的,微軟買了其專利使用權,它利用了FS段寄存器,將還原點壓入棧,收到異常時再彈出。相較而言,sjlj 是 C 標準庫就有的東西,seh 在 2014 年前是有專利的,從性能上說 seh 比 sjlj 快。只用於64位系統。
dwarf 只支持32位系統 – 沒有永久的運行時間開銷 – 需要整個調用堆棧被啓用,這意味着exception不能被拋出,例如Windows系統DLL。
綜上所述:
【x86_64 64位】
1、seh 是新發明的,而 sjlj 則是古老的。只用於64位系統。
2、seh 性能比較好,但不支持 32位。 sjlj 穩定性好,支持 32位和64位。
因此,x86_64系統架構的推薦使用 seh 的異常處理模型。
【i686 32位】
1、dwarf 只支持32位,而sjlj 支持32位/64位,但是dwarf 的性能要優於 sjlj。
因此,i686系統架構的推薦使用 dwarf 的異常處理模型。
操作:我的電腦是x86_64系統架構的,所以我選中 seh。
【參考】https://wiki.qt.io/MinGW-64-bit
Build revision
Build revision選項:建立修訂。
操作:選擇默認選項,我的下拉菜單隻有 0 這一個選項,別無選擇了。
三、選擇 MinGW-w64 的安裝目錄
可以看到,默認安裝目錄是在C盤的C:\Program Files\mingw-w64文件夾下,而C盤是系統盤,按照一般的習慣,我們儘量不把應用軟件安裝在系統盤裏。因爲以前的電腦使用的是機械硬盤,而機械硬盤頻繁讀寫會降低效率,所以儘量將操作系統與應用軟件放在不同的硬盤分區下。當然,現在的電腦大部分都配備了固態硬盤(SSD),而且通常作爲系統盤來使用,因此已經沒有讀寫效率的問題了。所以如果你還在用機械鍵盤,就將 MinGW-w64 放到其他非系統盤裏,如果使用固態硬盤,則可以放在安裝程序提示的默認位置,或其他地方均可。
操作:將自定義的路徑直接複製到"Destination folder"下的文本框中,如下圖是我自定義的安裝路徑:
說明:界面中的 Space available 指的是你選擇的目錄,所在的硬盤分區的剩餘空間,而 MinGW-w64 至少會佔用 500 MB 的空間。Create shortcuts in Start Menu 是說在開始菜單創建 MinGW-w64 的快捷方式,一般默認勾選即可。
操作:確認安裝目錄沒問題後,點擊紅框中的“Next”按鈕,開始正式安裝 MinGW-w64 。
四、開始下載 MinGW-w64 安裝文件
說明:安裝程序開始連接服務器,並從中下載 MinGW-w64 的安裝文件,下載速度取決於你所在的網絡環境,下載所需的時間會有所不同,如果你有其他事情要做,可以點擊“Cancel”按鈕,取消本次安裝。
操作:只需耐心等待。
五、下載完成後,點擊Next按鈕,最後點擊Finish 按鈕,安裝完成。
方式2—離線安裝
方式1安裝方式,比較直觀,對於新手建議採用方式1來安裝mingw-w64,但是對網絡要求比較高。也可以採用直接下載對應的離線壓縮包文件,然後直接解壓即可。
下載鏈接:https://sourceforge.net/projects/mingw-w64/files/
以目前最新版的爲例,下載離線文件列表如下:
根據方式1上面的說明,選擇對應的離線壓縮包,我按照自己的需求,下載的是:x86_64-posix-seh版本的。下載完成後,直接解壓到指定的目錄下,會生成一個mingw64文件夾,本人的路徑是:D:\Program Files\mingw64,mingw64文件夾的樹型結構如下所示:
說明:這些子文件夾和Linux下/usr/local目錄下的結構很相似,這裏就不再做說明了。
配置MinGW-w64 開發環境
在電腦桌面,鼠標右擊桌面圖標【計算機】-->屬性-->高級系統設置-->高級-->環境變量,有用戶變量和系統變量。系統變量對所有用戶有效,建議只在用戶變量下進行配置。我的mingw64軟件安裝的路徑爲: D:\Program Files\mingw64
1、新建變量: PATH,變量值爲:D:\Program Files\mingw64\bin
2、新建變量:LIB,變量值爲:D:\Program Files\mingw64\lib
3、新建變量:INCLUDE,變量值爲:D:\Program Files\mingw64\include
<Tips> Windows下的環境變量名是不區分大小寫的,這點跟Linux系統是有所不同的,一般而言,是建議環境變量名使用大寫。
配置完成後,點擊“確定”按鈕,使其生效。按下Windows+X,點擊命令提示符,輸入:gcc -v,如果配置成功就會打印出gcc的配置和版本信息,如下圖所示:
說明:看打印的信息可以看到,我們使用的線程模型是:posix,gcc版本是8.1.0。
總結
至此,在Windows下安裝配置MinGW-w64已經完成,在接下來的開發中我們就可以使用GCC編譯器編譯源文件了。其中,編譯C源文件使用gcc命令,而編譯C++源文件則使用g++命令。
參考
MinGW-w64安裝教程—著名C/C++編譯器GCC的Windows版本(在線安裝方式)