MinGW MinGW-w64 TDM-GCC等工具链之间的区别与联系

2024-01-17 00:30

本文主要是介绍MinGW MinGW-w64 TDM-GCC等工具链之间的区别与联系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不当之处,尽请指正。



先科普一下GNU相关:

大笑微笑

GNU计划英语:GNU Project),又译为革奴计划,是一个自由软件集体协作项目,1983年9月27日由理查德·斯托曼在麻省理工学院公开发起。它的目标是创建一套完全自由的操作系统,称为GNU。理查德·斯托曼最早在net.unix-wizards新闻组上公布该消息,并附带一份《GNU宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。

GNU是“GNU's Not Unix”的递归缩写。为避免与单词gnu(非洲牛羚,发音与“new”相同)混淆,斯托曼宣布GNU发音应为“Guh-NOO”(/ˈgnuː/ ),与“canoe”发音相似。其中,Emacs就是由这个计划孵化而出。

UNIX是一种广泛使用的商业操作系统的名称。由于GNU将要实现UNIX系统的接口标准,因此GNU计划可以分别开发不同的操作系统。GNU计划采用了部分当时已经可自由使用的软件,例如TeX排版系统和X Window视窗系统等。不过GNU计划也开发了大批其他的自由软件,这些软件也被移植到其他操作系统平台上,例如Microsoft Windows、BSD家族、Solaris及Mac OS。

为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件都包含一份在禁止其他人添加任何限制的情况下,授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL)。这个就是被称为“公共版权”的概念。GNU也针对不同场合,提供GNU宽通用公共许可证与GNU自由文档许可证这两种协议条款。

微笑

GNU是一个自由操作系统,其内容软件完全以GPL方式发布。这个操作系统是GNU计划的主要目标,名称来自GNU's Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。GNU的创始人,理察·马修·斯托曼,将GNU视为“达成社会目的技术方法”。

作为操作系统,GNU的发展仍未完成,其中最大的问题是具有完备功能的内核尚未被开发成功。GNU的内核,称为Hurd,是自由软件基金会发展的重点,但是其发展尚未成熟。在实际使用上,多半使用Linux内核、FreeBSD等替代方案,作为系统核心,其中主要的操作系统是Linux的发行版。Linux操作系统包涵了Linux内核与其他自由软件项目中的GNU组件和软件,可以被称为GNU/Linux(见GNU/Linux命名争议)。

微笑

自由软件基金会英语:Free Software FoundationFSF)是一个致力于推广自由软件美国民间非营利性组织。它于1985年10月由理查德·斯托曼建立。其主要工作是运行GNU计划,开发更多的自由软件。

微笑

GNU编译器套装英语:GNU Compiler Collection,缩写为GCC),一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU项目的关键部分,也是GNU工具链的主要组成部分之一。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。1985年由理查德·马修·斯托曼开始发展,现在由自由软件基金会负责维护工作。

原名为GNU C语言编译器GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、Java、Ada,以及Go与其他语言。

许多操作系统,包括许多类Unix系统,如Linux及BSD家族都采用GCC作为标准编译器。苹果电脑Mac OS X操作系统也采用这个编译器。

GCC原本用C开发,后来因为LLVM、Clang的崛起,它更快地将开发语言转换为C++。许多C的爱好者在对C++一知半解的情况下主观认定C++的性能一定会输给C,但是Taylor给出了不同的意见,并表明C++不但性能不输给C,而且能设计出更好,更容易维护的程序。

微笑

MinGWMinimalist GNU for Windows),又称mingw32,是将GCC编译器和GNU Binutils移植到Win32平台下的产物,包括一系列头文件(Win32API)、库和可执行文件。

另有可用于产生32位及64位Windows可执行文件的MinGW-w64项目,是从原本MinGW产生的分支[1]。如今已经独立发展

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编译。

MinGW-w64是2005年由OneVision Software根据洁净室设计原则而独立开发,以解决当时的MinGW项目更新缓慢,缺少新的重要的API以及64位支持。2008年MinGW-w64项目开源,由Kai Tietz维护。

  • SourceForge.net的MingW64官网提供https://sourceforge.net/projects/mingw-w64/上的提供由MinGW-Builds等项目组制作的预编译版。编译器分64位版和32位版、分别包含sjlj、drawf、seh异常处理机制、分别支持POSIX线程模式或Win32线程模式。用户可根据需要下载不同版本。例如,64位的seh、POSIX线程的最新稳定版本的gcc包的下载目录为:Toolchains targetting Win64 --> Personal Builds --> mingw-builds-->4.9.2-->threads-posix-->seh


大笑微笑


相同点:

一、 他们都是用于编译生成Windows应用程序的工具链。

二、 他们都是基于gcc的。


不同之处(只说大的):

一、项目之间的关系

1. MinGW应该是最先诞生的。

2. MinGW-w64项目最初是做为MinGW的一个分支而诞生,但现在已经独立发展。详细信息参见:

http://sourceforge.net/apps/trac/mingw-w64/wiki/History

http://zh.wikipedia.org/wiki/MinGW


3. TDM-GCC及其他类似的编译器集成包

 TDM-GCC是非官方组织提供及维护的编译器集成包。换句话说,他不是由MinGW或MinGW-w64项目官方提供的编译器集成包。

但他基于MinGW及MinGW-w64。而且,他也有他的优点:

例如,TDM-GCC集成了:

最新的稳定版本的GCC工具集,

 一些实用的补丁,

MinGW及MinGW-w64中的运行时API。

详细信息,参考:http://tdm-gcc.tdragon.net/about


除了TDM-GCC之外,类似的非官方编译器集成包有

Boost Science Package 、TakeoffGW等(其中大多基于MingGW-w64项目)。

更多编译器集成包参见:http://zh.wikipedia.org/wiki/MinGW


二、功能差别

1.  MinGW

貌似只能编译生成win32程序。


2.  MinGW-w64

支持编译生成Win32与Win64的windows程序。


3. TDM-GCC及其他非官方的编译器集成包

看他们基于什么项目。多数估计能支持编译生成Win32与Win64的windows程序。


三、运行平台

1.  MinGW

只能运行在windows平台。


2.  MinGW-w64

在Win32、Win64、Linux 32、linux 64等主流平台上都有版本可用。

详见:http://mingw-w64.sourceforge.net/download.php



3. TDM-GCC及其他非官方的编译器集成包

没细考证过。估计多半是运行在windows平台。


这篇关于MinGW MinGW-w64 TDM-GCC等工具链之间的区别与联系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/614398

相关文章

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

javascript中break与continue的区别

在javascript中,break是结束整个循环,break下面的语句不再执行了 for(let i=1;i<=5;i++){if(i===3){break}document.write(i) } 上面的代码中,当i=1时,执行打印输出语句,当i=2时,执行打印输出语句,当i=3时,遇到break了,整个循环就结束了。 执行结果是12 continue语句是停止当前循环,返回从头开始。

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们