MinGW
MinGW(Minimalist GNU for Windows),又稱mingw32,是將GCC編譯器和GNU Binutils移植到Win32平台下的產物,包括一系列標頭檔(Win32API)、函式庫和可執行檔案。
原作者 | Colin Peters |
---|---|
開發者 | MinGW Project |
首次釋出 | 1998年7月1日 |
目前版本 |
|
作業系統 | Microsoft Windows |
類型 | 編譯器 |
特許條款 | 公有領域(標頭檔), GPL(編譯器與工具鏈) |
網站 | osdn mingw |
另有可用於產生32位元及64位元Windows可執行檔案的MinGW-w64專案,是從原本MinGW產生的分支[2]。如今已經獨立發展[3]。
歷史
MinGW是從Cygwin(1.3.3版)基礎上發展而來。
程式語言支援
GCC支援的語言大多在MinGW也受支援,其中涵蓋C、C++、Objective-C、Fortran及Ada。
對於C語言之外的語言,MinGW使用標準的GNU執行時函式庫,如C++使用GNU libstdc++。
但是MinGW使用Windows中的C執行時函式庫。因此用MinGW開發的程式不需要額外的第三方DLL支援就可以直接在Windows下執行,而且也不一定必須遵從GPL特許條款。這同時造成了MinGW開發的程式只能使用Win32API和跨平台的第三方函式庫,而缺少POSIX支援[4],大多數GNU軟件無法在不修改原始碼的情況下用MinGW編譯。
組件
MinGW支援根據<name>.lib
和<name>.dll
命名的動態函式庫,以及遵循Unix和類Unix系統中常見的lib<name>.a
命名約定的靜態函式庫。
此外,MinGW的一個被稱為MSYS(最小系統)的組件提供了一個輕量級類Unix shell環境的Windows埠,包括rxvt和一些足以使autoconf指令碼執行的POSIX工具[5],但它不提供C編譯器或區分大小寫的檔案系統[6]。
與Cygwin比較
Cygwin 與 MinGW 皆可用來移植 Unix 軟件到 Windows,但它們採用截然不同的實作。Cygwin 旨在提供一個完整的 POSIX 層,包括主流 Unix 的系統呼叫及函式庫實作;其重視相容性優先於效能。相對的,MinGW 則着重簡化與效能。因此,它並不提供某些難以用 Windows API 實作的 POSIX API,例如 fork()
,mmap()
和 ioctl()
。使用跨平台函式庫寫成的應用程式,若函式庫本身已移植到了 MinGW(例如 SDL、wxWidgets、Qt 或 GTK+),則那些應用程式通常也容易用 MinGW 編譯。
用 Cygwin 寫成的 Windows 程式,因為是執行在公共版權的相容 DLL 上,所以 DLL 必須隨着程式原始碼一起發佈。MinGW 則不需要相容層,因為基於 MinGW 的程式是直接呼叫 Windows API 編譯的。
MinGW 搭配 MSYS 可以產生一個小卻完整的執行環境,讓程式可以載入隨身裝置當中,而不需要修改登錄檔或產生額外檔案。
在 POSIX 系統下,用 MinGW-GCC 交叉編譯 Windows 應用程式也是可行的。這意味着開發者不需要安裝 Windows 與 MSYS 就能編譯 Windows 軟件,或 Windows+Cygwin 軟件。
異常機制
MinGW編譯器在實作異常機制時,有三種可選方式:
- SJLJ (setjmp/longjmp):可用於32/64位元,但不是零代價的:即使不投擲異常,仍會有一定的效能損失(在最差情形下~15%)。
- DWARF (DW2, dwarf-2):只能用於32位元,沒有永久的執行時開銷,需要呼叫堆疊是dwarf-enabled,這意味着異常對於Windows system DLLs或Visual Studio編譯的DLLs的異常不能被投擲。
- SEH:零開銷。
MinGW-w64
MinGW-w64是2005年由OneVision Software根據淨室設計原則而獨立開發,以解決當時的MinGW專案更新緩慢,缺少新的重要的API以及64位元支援。2008年MinGW-w64專案開源,由Kai Tietz維護。
- SourceForge.net上的MinGW-w64官方的下載站點 提供由MinGW-Builds等專案組製作的預編譯版。編譯器分64位元版和32位元版、分別包含sjlj、drawf、seh例外處理機制、分別支援POSIX線程模式或Win32線程模式。用戶可根據需要下載不同版本。例如,64位元的seh、POSIX線程的最新穩定版本的gcc套件的下載目錄為:Toolchains targetting Win64 → Personal Builds → mingw-builds → 7.3.0 → threads-posix → seh
非官方編譯器整合安裝套件
很多非官方組織提供了包含一系列整合工具鏈的MinGW安裝套件。其中大部分基於MinGW-w64專案。
- TDM-MinGW GCC (頁面存檔備份,存於互聯網檔案館) MinGW編譯器安裝套件,整合了32位元、64位元的GCC 5.1.0 c/c++/fortran編譯器等。
- 64位元Win32線程模式 (頁面存檔備份,存於互聯網檔案館)。特色是包含很多第三方函式庫,如boost、libpng、zlib、coreutils、grep、make、w32api、sed、git等等;且為最新的GCC版本。
- MinGW package installer from Equation.com (頁面存檔備份,存於互聯網檔案館) 該網站提供了32位元和64位元的GCC以及nightly snapshot版本的安裝套件,以及gdb的nightly snapshot安裝套件。
- MinGW-w64 - for 32 and 64 bit Windows (頁面存檔備份,存於互聯網檔案館) 最新的nightly snapshot的編譯後的軟件。但似乎沒有整合iconv?
參見
參考資料
- ^ MinGW-w64 - for 32 and 64 bit Windows mingw-w64.
- ^ History. MinGW-w64 Wiki. [30 May 2013]. (原始內容存檔於2013年8月16日).
- ^ Harmonizing mingwrt / w32api with mingw-w64. MinGW Mailing list. [30 May 2013]. (原始內容存檔於2013-08-16).
- ^ MinGW - Minimalist GNU for Windows. [2024-11-22]. (原始內容存檔於2006-08-28).
MinGW, being Minimalist, does not, and never will, attempt to provide a POSIX runtime environment for POSIX application deployment on MS-Windows.
- ^ (wiki:) MSYS. MinGW.org. [2016-02-18]. (原始內容存檔於2016-02-18).
- ^ (wiki:) MSYS. MinGW.org. [2016-02-18]. (原始內容存檔於2016-02-18).
A common misunderstanding is MSYS is "UNIX on Windows", MSYS by itself does not contain a compiler or a C library, [...] nor does it provide any UNIX specific functionality like case-sensitive filenames.
外部連結
- MinGW 官方網站 (頁面存檔備份,存於互聯網檔案館)。
- OSDN上的MinGW官方的下載站點 (頁面存檔備份,存於互聯網檔案館)。