MinGW

(发布时间:2008年7月7日)

(原文地址:http://www.mingw.org/wiki/MinGW

MinGW(Minimumlist GNU for Windows——用于Windows环境的精简版GNU)由一系列可自由获取、自由发布的Windows特有(specific)头文件、导入库及GNU工具集组成,它可以生成本地Windows程序,而且不需要第三方C运行时DLL文件(动态链接库)的支持。

完整描述

MinGW引用了(refer to)一组运行时头文件,这些头文件用于创建基于GNU GCC和Binutils项目的编译器系统。MinGW用于将代码编译和链接为在Win32平台上运行的程序,它提供了C、C++和Fortran语言的编译器及相关工具。如果你看见某些地方使用“mingw32”的名称,而不是“MinGW”,这二者实际上指的是同一编译器系统。将项目名称由“mingw32”改为“MinGW”是为了消除它只能工作于32位平台的误解(随着64位以及更高位机器的普及,MinGW将同样适用于这些平台)。MinGW使用微软的运行时库,这些库是随Windows操作系统一起发布的。与其它GCC到Windows的移植不同,微软运行时库并不使用GNU的GPL(通用公共许可证)发布。因此,除非你使用了GPL库,否则的话,你可以不用将您的源代码随程序一起发布。

最初,MinGW由各种各样的包组成——比如,MinGW运行时、使用该运行时生成的应用(gcc、ld等)以及其它一些有用的组件(w32api头对于那些用于Win32 API的代码是必须的)。MinGW的开发者们通过下载所需要包的最新版本来不断更新MinGW环境。因为早期版本包的多变特性(更新被持续的提交),上述工作有必要的。但是,这却给新手带来了困惑,也为应用/库供应商设计由标准MinGW环境生成(build)的产品带来了麻烦。

因此,大约在2001年中期,当开发日趋成熟,各种包的更新也没有那么频繁的时候,作出了一个决定,即创建标准MinGW环境的单文件发布版。这个单一的压缩档文件包含了所有来自各组件包的文件,它们被捆绑在一起以备提取使用。我们仍提供分立组件包的下载,如果在下一次单文件版MinGW发布之前,其中的某个包有了更新,只需要使用新包对旧包进行替换即可。

与其它编译器套件的比较

MinGW是免费的GCC向Windows的移植,任何人都可以下载并使用它。该软件可将C、C++、ADA、Fortran和Java语言源程序编译成本地Windows程序(仅使用win32 API)。

与Cygwin不同,MinGW不提供Linux或Unix系统调用或POSIX(Portable Operating System Interface X,可移植操作系统接口)仿真层。某些POSIX兼容特性由支持的运行时库(mscvrt.dll)提供。也提供了一些附加功能来帮助可移植性。然而很有可能的是,一个POSIX应用需要移植成使用Windows API,才能使用MinGW进行编译,就好比你希望使用MSVC(Microsoft Visual C++)、Borland或Watcom C++编译一样。

既然有很多免费的Windows环境中使用的C编译器,为什么还需要MinGW呢?因为在Windows环境下,没有高质量的免费开源的C编译器,也没有免费的兼容GNU编译器套件的C++语言或其它语言的编译器。

既然微软已经免费发布Visual Studio,Windows编译器市场实际上处于一种不良的状态,其它的商业竞争者将逐渐消失。Borland已经停止维护它们的免费编译器;ICC-win32仅支持C语言;Djgpp仅生成面向32位DOS的可执行程序(exectables);而OpenWatcom原本就是个商业项目,幸运的是,由于Scitech的努力,它已经加入了开源C/C++编译器的行列中。但是,它并不是十分兼容GNU编译器标准,因此在生成那些不是专门设计于使用Watcom编译的开源项目时,会存在困难,而且它只支持C/C++和Fortran。对于数字火星项目(仅C/C++)也是如此,它目前正在销售自己的一部分编译器。因此,Windows下适用的高质量本地编译器仅有MSVC(IDE)和MinGW。

MinGW不提供GUI开发环境,而是通过命令行进行类UNIX式的访问。 MinGW的大多数开发者来自于UNIX背景,因此我们更喜欢命令行,但就我们所知,所有免费和收费的编译器都会提供命令行工具,包括编译器和链接器(有时是类似于make的东西),尽管它们强调的是IDE。

如果可以避免使用POSIX系统调用,Cygwin是足够的吗?尽管在Cygwin中使用Windows API是可行的,但你仍受限于Cygwin DLL的GPL许可证,它会限制使用它进行编译的软件的发行,而MinGW就不会给你的软件发布带来这些限制。类似的,MSVC创建了对微软运行时的依赖,该运行时是巨大的(large)、沉重的(heavy)、不能再发行的(non-redistributable)。

Cygwin本身就使用MinGW编译cygwin DLL文件,明显它不能依赖于Cygwin。因此,没有MinGW的话,Cygwin将必须使用收费编译器进行编译。

如果没有上层的POSIX仿真,应用会运行的更快。而且在有些时候,向应用中引入Cygwin DLL会导致与具有相同名称的本地函数的冲突,这会使得应用变得不稳定。因此使用MinGW编译应用扩展(application extensions)、组件和DLL文件会比使用Cygwin更安全。

在所有Windows下可用的生成(build)开源程序的C/C++编译器中,MinGW是当下唯一的现实选择。和MSYS联合,它是唯一可处理GNU风格生成工具的系统,使用这些工具可编译和生成更普遍的开源应用。Djgpp(用于32位DOS应用的GNU编译器)同样提供部分这样的功能,提供诸如bash shell的工具,但是很少有开源应用会使用Djgpp生成。大多数GUI库不会拥有DOS的移植,但是很多跨平台的GUI库,比如GTK和QT,具有Windows移植。Cygwin是另外一种选择,它提供了一个完整的系统,该系统允许使用常见的GNU生成工具。然而,即使添加了POSIX仿真(这是MinGW所没有),Cygwin上的开源程序也不都是直接生成为可直接使用的,它们经常需要打补丁。此外,POSIX系统上的大部分GUI库被设计成与X Windos集成,并且不使用win32库。这就意味着,很多使用Cygwin生成的含GUI的程序,需要X Server才能够运行。Cygwin提供一个X Server,试图与标准Windows机器的用户分享你喜欢的GUI程序。有一个用于Windows的单机版X Server,它的安装与运行不需要全部的Cygwin。尽管如此,与其它Windows用户分享程序是不容易的,因为他们需要安装X Server并且还需要包含几个Cygwin特有DLL文件以进行POSIX仿真。同样,你还得考虑需要随程序重新发布哪些DLL文件。Cygwin确实提供编译到本地Windows的选项(使用编译器切换),但是除非你特别喜欢使用Cygwin环境(以此代替msys),使用MinGW和使用msys及Cygwin进行生成之间并没有太大区别(Msys原本基于某些旧版本的Cygwin工具)。诸如微软visual C/C++和OpenWatcom的系统可能提供高质量的C/C++编译器。然而,如果你想要编译开源应用,除非有人特别创建了makefile、项目文件或如何使用这些编译器进行软件生成的指导,该项工作将很困难。

某些人喜欢GCC(因此MinGW)的原因是它对ANSI的高度兼容,这也提高了使用GCC开发的程序的可移植性。

MinGW中的包

binutils汇编器、链接器等;

mingw-runtimeHeaders and libraries for the C library

w32apiWindows API头文件及库;

gcc-core:C编译器;

gcc-g++:C++编译器;

gcc-objc:Objective C编译器;

gcc-gfortranFortran 90/95编译器;

gcc-javaJava编译器;

gcc-ada:ada编译器;

mingw-gdb:GNU调试器的Windows本地生成;

mingw32-make:GNU make的Windows本地生成;

mingw-utils:各种实用工具;

MinGW包的内容

binutils(必须项): GNU二进制工具的本地移植。该包含有多种工具,比如汇编器、链接器。用于将编译器的输出转换为二进制可执行文件。你必须安装该包,以及gcc-core,才能获得功能正常的编译器套件;

mingw-runtime(必须项): 默认的C运行时库(也称作msvcrt)的头文件及导入库。由MinGW编译的程序必须依靠该库才能运行在Windows操作系统上。你必须随gcc-core一起安装该包,以获得工作正常的编译器套件。

w32api(必选项): 这是微软Windows操作系统的头文件及导入库,它提供了访问操作系统服务程序所需要的应用程序接口(API),任何工作于Windows的应用都需要该接口。同样,你也必须随gcc-core一起安装该包,以获得工作正常的编译器套件。

gcc(必选项): GCC编译器的本地移植。这是解析源文件的应用,用于将源文件翻译成可链接的目标代码。注意,GCC套件又分为gcc-core包(仅提供C编译器)及支持其它编程语言的附加包。你必须至少安装gcc-core。如果你想要添加其它语言的支持,请确保你选择了合适的包,它们的版本号应与gcc-core包的版本号一致。

mingw-gdb: GNU调试器的本地移植。

mingw32-make: GNU make的本地移植。该应用用于解析makefile并根据该文件中描述的规则来创建项目。

mingw-utils: 各种应用。

MinGW基本情况介绍相关推荐

  1. 分布式 java 应用:基础与实践_西研技术大讲堂第二期FRCS应用情况介绍及分布式技术平台能力应用实践...

    为制定高质量的技术培训课程,营造崇尚技术的浓厚学习氛围,使研发部组建云计算.分布式框架.用数赋智等专业技术队伍,每周四晚,"西研技术大讲堂"开课啦!第一期<工银磐石(分布式技 ...

  2. 7005.ADS-B建设和规划情况介绍

    7005.ADS-B建设和规划情况介绍 主要内容: 1.      ADS-B技术政策 2.      ADS-B项目开展情况 3.      十二五规划情况 4.      未必发展与远期目标 详细 ...

  3. 每当再右侧的选择框中选中一个人的名字时,便在左侧的文本区中显示出此人的情况介绍,按close按钮时结束程序的运行

    每当再右侧的选择框中选中一个人的名字时,便在左侧的文本区中显示出此人的情况介绍,按close按钮时结束程序的运行 package p2;import java.awt.event.*; import ...

  4. 数据库锁与加锁情况介绍(记录锁、间隙锁、next-key锁)

    数据库的锁 关于mysql有哪些锁?锁的分类有哪些?可查看另外一篇博客:mysql 的锁 下面主要是记录在实际情景中的加锁情况进行分析 测试环境介绍 innodb 引擎下,隔离级别在 REPEATAB ...

  5. 加拿大前十大学计算机硕士学费,加拿大各大学硕士学费的情况介绍

    加拿大各大学硕士学费的情况介绍 在计划申请加拿大研究生留学时,了解加拿大读研费用是非常关键的一步,各大学的学费是有所不同的.快来看看小编为你准备的加拿大各大学硕士学费的情况,欢迎大家阅读! 加拿大各大 ...

  6. 国家自然基金上会评审若干情况介绍

    国家自然基金上会评审若干情况介绍 原文地址:http://mp.weixin.qq.com/s?__biz=MzA5OTMxMTUzMw==&mid=211415058&idx=1&a ...

  7. 医疗器械公司计算机系统和功能说明,医疗器械计算机信息管理系统基本情况介绍和功能说明...

    医疗器械计算机信息管理系统基本情况介绍和功能说明 器械的流向可追溯,保证了医疗器械质量管理活动有序高效地运行.计算机管理系统的设计.使用和验证情况: (一).质量管理基础数据管理模块 1.供货单位数据 ...

  8. 山东省科协和山东省计算机协会信息奥赛夏令营活动,山东省信息学奥赛活动的开展情况介绍.doc...

    山东省信息学奥赛活动的开展情况介绍 立足普及 迈向提高 全国信息学奥林匹克竞赛(National Olympiad in Informatics,NOI))是一项面向全国青少年的信息学竞赛和普及活动, ...

  9. 独家汇总! 全国30家5G产业联盟名单发布!(附情况介绍)

    为搭建5G产业深度合作与交流平台,加快形成信息共享.优势互补.合作共赢的5G生态圈,各地5G类别行业组织相继成立. 小编呕心沥血汇总了超22个省市的30家5G产业联盟/促进会,并介绍了他们的情况(如指 ...

最新文章

  1. 聊一聊:你都用什么方式回忆青春呢?
  2. 手写一个迷你版的 Tomcat 喵【转】
  3. 可重入锁ReentrantLock--转载
  4. Java中数组在内存中的存放原理?
  5. 统计百度网盘文件个数 V3
  6. MFC如何让输入框只能输入数字
  7. web集群之haproxy相关配置
  8. 微信小程序云开发教程-微信小程序的JS基础-常用的回调函数
  9. Modelsim缺失库快速添加
  10. 西门子博途v14 SP1 S7-1200之间的以太网双边通讯(两个S7-1200 在一个项目中)
  11. 2017又是新的一年
  12. 2020牛客寒假算法基础集训营4 G题 音乐鉴赏(数学期望)
  13. 计算机编码知识,ASCII编码,GBK,Unicode,UTF-8编码详细介绍
  14. 搭建室内四轴无人机(一)
  15. 笔记:美团智能配送系统的运筹优化实战
  16. C Primer Plus(第五版)2
  17. 在 iphone 手机浏览器无法下载(主要指 safari 和 chrome ) excel ,但是可以直接预览 excel
  18. 关于ruoyi验证码无法显示的问题
  19. C·cJSON库函数--cJSON_GetObjectItem
  20. Mysql的MMM高可用群集

热门文章

  1. 系统清理优化工具:CCleaner
  2. sumproduct()学习
  3. 物联网解决方案世界大会-IOTSWC
  4. 读书笔记:《德鲁克管理思想精要》- 2
  5. 2.3(将英尺转化为米)编写程序,读入英尺数,将其转换为米数并显示结果。1英尺等于0.305米
  6. 【红队APT】反朔源隐藏C2项目CDN域前置云函数数据中转DNS转发
  7. Cesium学习笔记--Sandcastle is not defined
  8. 股神巴菲特给股市新手的8条投资忠告
  9. Hive的五个基础介绍
  10. 离散时间傅里叶变换(理解推导)