MinGW
| 原作者 | Colin Peters |
|---|---|
| 开发者 | MinGW Project |
| 初始版本 | 1998年7月1日 |
| 稳定版本 | GNU BinUtils—2.32-1, Installation Manager—0.6.3, WSL—5.2.1[1] (2019年2月11日)
|
| 作业系统 | Microsoft Windows |
| 类型 | 编译器 |
| 授权条款 |
公有领域(标头档), GPL(编译器与工具链) |
| 网站 |
osdn mingw |
MinGW(Minimalist GNU for Windows),又称mingw32,是将GCC编译器和GNU Binutils移植到Win32平台下的产物,包括一系列标头档(Win32API)、函式库和可执行档。
另有可用于产生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编译。
与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?
参见
参考资料
- ^ Download Package list. osdn.net. [2021-07-02]. (原始内容存档于2016-10-04).
- ^ 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. [2022-06-01]. (原始内容存档于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.
外部连结
- MinGW 官方网站 (页面存档备份,存于网际网路档案馆)。
- OSDN上的MinGW官方的下载站点 (页面存档备份,存于网际网路档案馆)。