MinGW
(),又称,是将GCC编译器和GNU Binutils移植到平台下的产物,包括一系列头文件(Win32API)、库和可执行文件。
原作者 | |
---|---|
開發者 | |
初始版本 | 1998年7月1日 |
穩定版本 | (2018年7月13日 ) |
操作系统 | Microsoft Windows |
类型 | 編譯器 |
许可协议 | 公有領域(標頭檔), GPL(編譯器與工具鏈) |
网站 | mingw.org |
历史
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支持[3],大多数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等等。
- 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 官方网站 页面存档备份,存于。
- OSDN上的MinGW官方的下载站点 页面存档备份,存于。