gcc编译器概览

Advertisement

gcc编译器概览

引言

gcc现在的意思是“GUN编译器集合”,这里说的是上个世纪的意思“GUN C语言编译器”。

1.1程序的一般编译过程

以gcc为例:

一般情况下,比如我们有一个源文件:main.c,里面写的是我们的代码。想执行以下,gcc main.c,执行以下这个命令就会生成一个a.out的文件。然后./a.out就可以执行了。但是,这中间的过程可注意过吗?这就是编译原理要研究的内容了。这一节先说一下整个的处理过程,具体细节会在以后逐渐讨论,包括,词法分析,语法分析,中间代码生成和优化,优化又包括机器无关优化,并行性和局部性优化,等等这些内容。以及如何自己发明一种语言,然后自己动手写一个编译器将其编译!

分别加入参数可查看各个阶段的结果。

在上图中,CPP是“预编译”的缩写,AST是“抽象语法树”的缩写,SSA是“静态单赋值”的缩写,RTL是“寄存器传输语言”的缩写。各种含义,需要仔细品味一下,呵呵。

过程如下:

1》将不同语言,进行词法分析,语法分析,得到对应语言的AST

2》这些AST之间有稍微的差别,然后把这些差别去除,生成通用AST

3》按照AST,生成中间代码(三地址代码,即:x=y op z)

4》对中间代码进行优化,这部分的任务很艰巨

5》根据目标机器的汇编描述,生成对应机器架构的汇编语言

6》到此编译器的任务就算完了,剩下的汇编器。

7》汇编器将其汇编成机器代码(010100101000101010010101010000101011110.。。。。。)

8》连接器ld将源码中调用的库函数连接进来

9》最后,是加载器,将可执行文件加载到内存,并执行之。

1.2编译器的前端处理过程

下面是一句简单的c语句的编译过程。

如图所示:

参考:

1. 《编译原理》

2. http://blog.csdn.net/rill_zhen/article/details/7703557

Similar Posts:

  • Linux RHEL Server6.0 成功安装gcc编译器

    Linux系统(RHEL Server6.0)成功安装gcc编译器 版本一致.依赖性文件不能缺少,逐个安装 在./configure配置编译源码的时候出现以下错误 checking for gc... no checking for cc... no checking for cl.exe... no 说明系统没有安装gcc编译器 利用光盘安装GCC 挂载光盘: mkdir -p /root/iso mount /dev/cdrom /root/iso cd /root/iso/Server 以

  • <转载>linux gcc编译器中使用gdb单步调试程序,程序不是顺序执行的。

    原文地址http://blog.csdn.net/abc78400123/article/details/6779108 在用gdb调试,使用s 或n单步执行程序时,发现程序不是按顺序运行的,有时莫名其妙的执行到前面的语句去了,有时又执行到后面的语句,有时一次执行几条语句.后来查了下资料.原来这是编译时的优化问题所导致的. 因为内核的编译是使用make命令的,所以要更改优化等级的话,只能修改makefile文件了. 在makefile中,找到CFLAGS 然后在这加上-O0选项即可. 当然这个m

  • mtl库在GCC编译器下的使用

    最近一直在改造算法库,将其移植到Linux平台下.使用GCC编译器是发现MTL库中出现一大堆的问题.使用的MTL库下载地址为:http://osl.iu.edu/research/mtl/download.php3.在上面的网页中,需要下载下面三个压缩包,其中第一个是MTL库的源代码,第二个是在Visual Studio平台下编译的补丁包,第三个是gcc编译器的补丁包. http://osl.iu.edu/download/research/mtl//mtl-2.1.2-22.tar.gz ht

  • GCC编译器(2)

    接GCC编译器(1) 4.警告选项 在编译过程中,编译器的报错和警告信息对于程序员来说是非常重要的信息,GCC包含完整的出错检查和警告提示功能,它可以帮助Linux程序员尽快找出错误的或潜在的错误代码,从而写过更优美的代码.GCC的编译器警告选项如下表: 在发生警告时取消编译操作,即将警告看作是错误 类型 说明 -Wall 启用所有警告信息 -Werror 在发生警告时取消编译操作,即将警告看作是错误 -w 禁用所有警告信息 下面看一段代码,使用GCC编译,同时开启警告信息: #include

  • C语言的本质(33)——GCC编译器入门

    GCC(GNU CompilerCollection,GNU编译器套装),是由 GNU 开发的编程语言编译器.它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分.GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统采纳为标准的编译器,GCC同样适用于微软的Windows.GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布.GCC是Linux平台下最常用的编译程序,是Linux平台编译器的事实标准. 程序的编译过程 对于GUN编译器来说,程序的编

  • Keil5.15使用GCC编译器链接.a库文件

    我们知道,当使用第三方的代码时,人家有可能会扔个Lib文件给你.这时候,别人只要提供header文件给你,则你就可以通过Lib文件及header的函数声明,对Lib中的函数进行调用.在Keil中如果使用ARMCC调用Lib文件,相信大家都能从网上找到方法.那如果在Keil中使用GCC来链接第三方GCC编译好的Lib文件--".a"应该如何呢? 在告诉大家方法之前,我们写个简单的函数,然后用GCC编译器编译产生.a文件,便于我们进行测试. 首先,在Keil中配置gcc编译环境,这个可以参

  • gcc 编译器常用的命令行参数汇总

    gcc 编译器常用的命令行参数汇总 1. gcc -E source_file.c -E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_file.c -S,只执行到源代码到汇编代码的转换,输出汇编代码. 3. gcc -c source_file.c -c,只执行到编译,输出目标文件. 4. gcc (-E/S/c/) source_file.c -o output_filename -o, 指定输出文件名,可以配合以上三种标签使用. -o 参数可以被省略.这种情况下编

  • gcc编译器编译源代码的四步

    我们平常用GCC编译器来编译C/C++语言的源代码时,所用到只是一个GCC命令后面加上一些参数与源代码名而已,经过一段时间的学习后,才明白中间实际上进行四步预处理.编译.汇编.连接,今天把它写到自己的博客,一是作为一次复习,二呢让正在想学习C/C++语言的朋友在看到我的文章之后,作为一个小小的学习吧,如果是高手看到了,如有写得不周到之处,请批评指正! 这四步是: 第一步:把源代码文件进行预处理,其命令为:cpp *.c>*.i(说明,*.c这是所要进行预处理或者说要进行编译的源代码,而C语言的在

  • fflush(stdin)在gcc编译器中不起作用?

    ==================================================================================================================================== 一.先看看如下代码片段,test.c #include <stdio.h> int main(){ int etype; int type; int code; int value; whlie(1){ etype = 0; typ

  • 编译最新版本的GCC编译器

    2004年4月20日最新版本的GCC编译器3.4.0发布了.目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC.ADA等语言的程序,可根据需要选择安装支持的语言.GCC 3.4.0比以前版本更好地支持了C++标准.本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程. 安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器.如果系统上没有编译器,不能安装源代码形式的GCC 3.4.0.如果是这种情况,可

Tags: