GCC

✍ dations ◷ 2025-11-23 04:15:57 #编译器软件,GNU计划软件,C编译器

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作为标准编译器。

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

GCC是由理查德·马修·斯托曼在1985年开始的。他首先扩增一个旧有的编译器,使它能编译C,这个编译器一开始是以Pastel语言所写的。Pastel是一个不可移植的Pascal语言特殊版,这个编译器也只能编译Pastel语言。为了让自由软件有一个编译器,后来此编译器由斯托曼和Len Tower在1987年以C语言重写并成为GNU项目的编译器。GCC的创建者由自由软件基金会直接管理。

在1997年,一群不满GCC缓慢且封闭的创作环境者,组织了一个名为EGCS(Experimental/Enhanced GNU Compiler System)的项目,此项目汇整了数项实验性的分支进入某个GCC项目的分支中。EGCS比起GCC的建构环境更有活力,且EGCS最终也在1999年四月成为GCC的官方版本。

GCC目前由世界各地不同的数个程序员小组维护。它是移植到最多中央处理器架构以及最多操作系统的编译器。

由于GCC已成为GNU系统的官方编译器(包括GNU/Linux家族),在LLVM、Clang崛起之前,它也是编译与创建其他操作系统的主要编译器,包括BSD家族、Mac OS X、NeXTSTEP与BeOS等。

GCC通常是跨平台软件的编译器首选。有别于一般局限于特定系统与运行环境的编译器,GCC在所有平台上都使用同一个前端处理程序,产生一样的中介码,因此此中介码在各个其他平台上使用GCC编译,有很大的机会可得到正确无误的输出程序。

以2011年10月26日发布的4.6.2版为准,本编译器版本可处理下列语言:

先前版本纳入的CHILL(英语:CHILL)前端由于缺乏维护而被废弃。

Fortran前端在4.0版之前是G77,此前端仅支持Fortran 77。在本版本中,G77被废弃而采用更新的GFortran,因为此前端支持Fortran 95。

下列前端依然存在:

OpenMP是一种跨语言的对称多处理机多线程并行程序的编程工具,也非常适合当今越来越流行的单CPU多核硬件环境,因此从gcc4.2开始,OpenMP成为其内嵌支持的并行编程规范,可以直接编译内嵌OpenMP语句的C/C++/Fortran95的源代码。gcc4.2之前如果想在C/C++/Fortran中嵌入OpenMP语句的话,需要额外安装库和预处理器才能识别和正确处理这些语句。现在 GCC GOMP 计划实现了这些支持:

GCC目前支持下列处理器架构(以4.1版为准):

较不知名的处理器架构也在官方发布版本中支持:

由FSF个别维护的GCC处理器架构:

当GCC需要移植到一个新平台上,通常使用此平台固有的语言来撰写其初始阶段。

GCC的外部接口长得像一个标准的Unix编译器。用户在命令行下键入gcc之程序名,以及一些命令参数,以便决定每个输入文件使用的个别语言编译器,并为输出代码使用适合此硬件平台的汇编语言编译器,并且选择性地运行链接器以制造可执行的程序。

每个语言编译器都是独立程序,此程序可处理输入的源代码,并输出汇编语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的源代码,并产生一抽象语法树,以及一翻译此语法树成为GCC的寄存器转换语言的后端。编译器最优化与静态代码解析技术(例如FORTIFY_SOURCE 页面存档备份,存于互联网档案馆,一个试图发现缓存溢出的编译器)在此阶段应用于代码上。最后,适用于此硬件架构的汇编语言代码以杰克·戴维森(英语:Jack Davidson)与克里斯·弗雷泽(英语:Chris Fraser)发明的算法产出。

几乎全部的GCC都由C/C++写成,除了Ada前端大部分以Ada写成。

前端的功能在于产生一个可让后端处理之语法树。此语法解析器是手写之递归语法解析器。

直到最近,程序的语法树结构尚无法与欲产出的处理器架构脱钩。而语法树的规则有时在不同的语言前端也不一样,有些前端会提供它们特别的语法树规则。

在2005年,两种与语言脱钩的新类型语法树纳入GCC中。它们称为GENERIC与GIMPLE。语法解析变成产生与语言相关的暂时语法树,再将它们转成GENERIC。之后再使用“gimplifier”技术降低GENERIC的复杂结构,成为一较简单的静态唯一形式(Static Single Assignment form,SSA)基础的GIMPLE形式。此形式是一个与语言和处理器架构脱钩的全局最优化通用语言,适用于大多数的现代编程语言。

一般编译器作者会将语法树的最优化放在前端,但其实此步骤并不看语言的种类而有不同,且不需要用到语法解析器。因此GCC作者们将此步骤归入通称为中介阶段的部分里。此类的最优化包括消解死码、消解重复运算与全局数值重编码等。许多最优化技巧也正在实现中。

GCC后端的行为因不同的前处理器宏和特定架构的功能而不同,例如不同的字符尺寸、调用方式与大小尾序等。后端接口的前半部利用这些消息决定其RTL的生成形式,因此虽然GCC的RTL理论上不受处理器影响,但在此阶段其抽象指令已被转换成目标架构的格式。

GCC的最优化技巧依其发布版本而有很大不同,但都包含了标准的最优化算法,例如循环最优化、线程跳跃、共通程序子句消减、指令调度等等。而RTL的最优化由于可用的情形较少,且缺乏较高端的信息,因此比较起近来增加的GIMPLE语法树形式,便显得比较不重要。

后端经由一重读取步骤后,利用描述目标处理器的指令集时所获取的信息,将抽象寄存器替换成处理器的真实寄存器。此阶段非常复杂,因为它必须关照所有GCC可移植平台的处理器指令集的规格与技术细节。

后端的最后步骤相当公式化,仅仅将前一阶段得到的汇编语言码借由简单的副函数转换其寄存器与存储器位置成相对应的机器代码。

为GCC调试的首选工具当然是GNU调试器。其他特殊用途的调试工具是Valgrind,用以发现内存泄漏(Memory leak)。而GNU测量器(gprof)可以得知程序中某些函数花费多少时间,以及其调用频率;此功能需要用户在编译时选定测量(profiling)选项。

内嵌汇编也称行内汇编,是把汇编语言代码块插在C语言语句之间。详情参见GCC-Inline-Assembly-HOWTO.html 页面存档备份,存于互联网档案馆

相关

  • 荧光荧光(fluorescence)是一种光致冷发光现象。当某种常温物质经某种波长的入射光(通常是紫外线或X射线)照射,吸收光能后进入激发态,并且立即退激发并发出出射光(通常波长比入射光的的
  • 髓磷脂髓磷脂(英语:Myelin)为包绕在神经元的轴突外部的物质,每隔一段距离便有中断部分,形成一节一节的形状。中断的部分称为“兰氏结”(Ranvier's node)。髓磷脂由30%蛋白质和70%的各类脂
  • 波德平原北德平原(德语:Norddeutsches Tiefland),又称中欧平原,位于波兰和德国北部。北临波罗的海和北海,南接中欧山地,西起莱茵河口,东至波兰东部;东西长约1000公里,南北宽约200-500公里,总面积
  • 学校体育体育(英语:Physical Education,缩写P.E.)是一项在小学、中学和大学中开展的教学活动,旨在促进参与者在身体活动的过程中获得身心全面发展。在不同国家学校体育教学的任务及目标存
  • 科乐美科乐美(日语:コナミ),是日本著名的电子游戏制作商,于1969年3月21日在大阪府成立,目前总部设在东京都。“KONAMI”一名来自科乐美创办人上月景正、仲真良信、宫迫龙雄的各自姓氏的
  • 自旋回波自旋回波,是磁共振现象中的一种信号来源,相对于第一个射频脉冲(RF pulse)激发后立刻出现的自由感应衰减(FID),自旋回波是透过第二个射频脉冲之后,将失相的磁化向量重新聚焦(refocus)而
  • 李枝长李枝长,直隶静海县(今天津市静海区)人,清朝政治人物。顺治十五年(1658年)戊戌科进士,授四川宜宾县知县。
  • 东海村坐标:36°28′22.7″N 140°33′58″E / 36.472972°N 140.56611°E / 36.472972; 140.56611东海村(日语:東海村/とうかいむら Tōkai mura */?)是关东地方东北部,茨城县北部的
  • 岸田今日子岸田今日子(日语:岸田 今日子,1930年4月29日-2006年12月17日),日本女演员、配音员、童话作家。身高156cm。A型血。1930年4月29日出生于东京府豊多摩郡(今东京都杉并区),父亲是剧作家
  • 法国公立科学、文化和专业机构列表法国的公立科学、文化和专业机构包含了法国全部的公立教育研究和文化机构,他们中大部分为高等院校,其中也包括了像天文馆等科学文化机构。2013年通过的法国高等教育研究法规定