MinGW,是Minimalist GNU for Windows的縮寫。它是一個(gè)可自由使用和自由發(fā)布的Windows特定頭文件和使用GNU工具集導(dǎo)入庫的集合,允許你在GNU/Linux和Windows平臺生成本地的Windows程序而不需要第三方C運(yùn)行時(shí)(C Runtime)庫。MinGW 是一組包含文件和端口庫,其功能是允許控制臺模式的程序使用微軟的標(biāo)準(zhǔn)C運(yùn)行時(shí)(C Runtime)庫(MSVCRT.DLL),該庫在所有的 NT OS 上有效,在所有的 Windows 95發(fā)行版以上的 Windows OS 有效。使用基本運(yùn)行時(shí),你可以使用GCC 寫控制臺模式的符合美國標(biāo)準(zhǔn)化組織(ANSI)程序,可以使用微軟提供的 C 運(yùn)行時(shí)(C Runtime)擴(kuò)展,與基本運(yùn)行時(shí)相結(jié)合,就可以有充分的權(quán)利既使用 CRT(C Runtime)又使用 Windows API 功能。
發(fā)展沿革
MinGW項(xiàng)目的開發(fā)已分叉,在2005-2008年創(chuàng)建了一個(gè)名為Mingw-w64的替代項(xiàng)目,以提供對64位和新API的支持。MinGW可以在本地的Microsoft Windows平臺上運(yùn)行,也可以在Linux(或其他Unix)上交叉托管,或在Cygwin上“交叉原生”運(yùn)行。盡管MinGW下生成的程序是32位可執(zhí)行文件,但它們可以在Windows的32位和64位版本中使用。
2010年06月09日,MinGW 2.14 發(fā)布,該版本修正了下載錯(cuò)誤的問題,同時(shí)幾乎升級了所有的依賴軟件包到最新版本,新增對 libarchive, libgee, xvidcore 包的支持。
2010年06月18日,MinGW 2.15 發(fā)布,跨平臺編譯環(huán)境,該版本修正了由Qt項(xiàng)目引起的下載錯(cuò)誤,另外所有相關(guān)的包都升級到了最新版本。
2010年12月13日,MinGW 2.17 發(fā)布。
2011年03月20日,MinGW 2.19 發(fā)布,該版本改進(jìn)內(nèi)容:
1. 改進(jìn)了下載機(jī)制,
2. A cmake toolchain file is now provided to simplify cross-compiling projects that use CMake,
3. 不再支持 Lenny (GNU/Linux老穩(wěn)定版本),
4. gtk 包改名為 gtk2,
5. 更新幾乎所有的包到最新的版本,
6. 支持下列表: dbus, graphicsmagick, libical, liboauth, physfs, and vigra. boost::filesystem users should note that version 3 is a major revision and now the default in 1.46。
2011年06月09日,MinGW 2.21 發(fā)布,該版本修復(fù)了很多包中的一些小bug,并升級幾乎所有的包到最新的版本;而 gtkmm 和 gtksourceviewmm 重命名為 gtk瘋狂城市賽車 2 和gtksourceviewmm2 ;增加對 libass、poco和 t4k_common 包的支持。
MSYS(“最小系統(tǒng)”的縮寫)被引入為Bourne shell命令行解釋器系統(tǒng),旨在更好地與本機(jī)Windows軟件互操作。2018年,在與sourceforge關(guān)于其郵件列表管理發(fā)生分歧后,MinGW遷移到了OSDN。
功能服務(wù)
大多數(shù)由GCC支持的語言也在MinGW端口上得到支持。其中包括C、C++、Objective-C、Objective-C++、Fortran和Ada。使用GCC運(yùn)行時(shí)庫(C++使用libstdc++,F(xiàn)ortran使用libgfortran等)。MinGW默認(rèn)鏈接到Windows操作系統(tǒng)組件庫MSVCRT,這是Visual C++版本6.0鏈接到的C庫(最初的目標(biāo)是CRTDLL),該庫于1998年發(fā)布,因此不包括對C99特性的支持,甚至不包括所有C89特性。雖然針對MSVCRT的程序不需要安裝額外的運(yùn)行時(shí)可再發(fā)行組件,但缺乏對C99的支持引起了移植問題,尤其是在涉及printf樣式轉(zhuǎn)換說明符的情況下。這些問題已通過實(shí)現(xiàn)C99兼容庫libmingwex部分得到緩解,但所需的大量工作遠(yuǎn)未完成,可能永遠(yuǎn)無法完全實(shí)現(xiàn)。Mingw-w64已解決這些問題,并提供了完全符合POSIX的printf功能。
用不同的C++編譯器(如MinGW和Visual Studio)生成的二進(jìn)制文件(可執(zhí)行文件或DLL)通常在鏈接時(shí)不兼容。但是,已編譯的C代碼在鏈接時(shí)是兼容的。
MinGW項(xiàng)目維護(hù)和分發(fā)許多不同的核心組件和補(bǔ)充包,包括各種GNU工具鏈的端口,例如GCC和binutils,并轉(zhuǎn)換為等效包。這些實(shí)用程序可以從Windows命令行中使用或集成到集成開發(fā)環(huán)境中。可以通過mingw-get使用命令行安裝軟件包。
MinGW支持根據(jù)
此外,MinGW的一個(gè)組件MSYS(最小系統(tǒng))提供了輕量級類Unix shell環(huán)境的Windows端口,包括rxvt和一系列POSIX工具,足以使autoconf腳本運(yùn)行,但它不提供C編譯器或區(qū)分大小寫的文件系統(tǒng)。
mingwPORTs是用戶對MinGW軟件集合的附加內(nèi)容。它們不是以預(yù)編譯的二進(jìn)制包的形式提供這些“附加組件”,而是以交互式Bourne shell腳本的形式提供,指導(dǎo)最終用戶完成自動(dòng)下載和修補(bǔ)原始源代碼,然后構(gòu)建并安裝的過程。希望從mingwPORT構(gòu)建任何應(yīng)用程序的用戶必須首先安裝MinGW和MSYS。
Windows系統(tǒng)頭文件和靜態(tài)導(dǎo)入庫的實(shí)現(xiàn)是在寬松許可下發(fā)布的,而GNU端口是在GNU通用公共許可下提供的。可以在MinGW網(wǎng)站上下載完整MSYS軟件包和各個(gè)MinGW GNU實(shí)用程序的二進(jìn)制文件。
功能特色
盡管Cygwin和MinGW都可用于將Unix軟件移植到Windows,但它們有不同的方法:Cygwin旨在提供一個(gè)完整的POSIX層,包括所有主要Unix系統(tǒng)調(diào)用和庫的完整實(shí)現(xiàn)。兼容性被認(rèn)為比性能更重要。另一方面,MinGW的優(yōu)先事項(xiàng)是簡單性和性能。因此,它不提供某些POSIX API,這些API無法使用Windows API輕松實(shí)現(xiàn),例如fork()、mmap()和ioctl()。使用自身已移植到MinGW的跨平臺庫編寫的應(yīng)用程序,例如SDL、wxWidgets、Qt或GTK,通常在MinGW中的編譯與在Cygwin中一樣容易。
使用Cygwin編寫的Windows程序在必須與程序一起分發(fā)的受copyleft保護(hù)的兼容性DLL之上運(yùn)行,除非它靜態(tài)鏈接。如果動(dòng)態(tài)鏈接,程序還必須提供有關(guān)從何處獲取Cygwin源代碼的信息。MinGW不需要兼容層,因?yàn)榛贛inGW的程序是使用對Windows API的直接調(diào)用編譯的。
MinGW和MSYS的結(jié)合提供了一個(gè)小型的、自包含的環(huán)境,可以加載到可移動(dòng)介質(zhì)上,無需在注冊表中保留條目或在計(jì)算機(jī)上保留文件。還可以使用POSIX系統(tǒng)交叉編譯MinGW-GCC的Windows應(yīng)用程序。這意味著開發(fā)人員不需要安裝帶有MSYS的Windows以編譯將在Windows上使用或不使用Cygwin運(yùn)行的軟件。
參考資料 >