GCC 编译器原理

 

 

l  全称为GNU CC GNU项目 中符合中符合ANSI C标准的标准的编译系统

l  编译如编译如CCC++C++ObjObject CCJJ avaFFortranPPascall

Modula-3Ada等多种语言

l  GCCGCC是可以为多种硬体平台上编译出可执行程序的超级编是可以为多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高

20%~30%

l  一个交叉平台编译器 ,适合在嵌入式领域的开发编译


GCC编译器的版本

l  GNU Compiler Collection

l  C, C++, Objective-C, Fortran, Java, Ada GCC 4.3.1 

l  http://gcc.gnu.org  

GCC 4.3.0 

Mar55, 2008

GCC 3.3

May 13, 2003 

GCC 3.2

August 14, 2002

GCC3.0

June 18, 2001

GCC 2.95

July 31, 1999

                                                                                        

GCC简介

gcc所支持后缀名解释所支持后缀名解释

     .c                     C原始程序

     .C/.cc/.cxx            C++原始程序

     .m                     Objjective-C原原始程序程序

     .i            已经过预处理的C原始程序

     .iiii                   已经过预处理的已经过预处理的C++C++原始程序原始程序

     .s/.S         汇编语言原始程序

     .hh                    预处理文件预处理文件((头文件头文件))

     .o                     目标文件

     .a//.so       编译后的库文件编译后的库文件

                      

编译器的作用

          源代码*.c                                      GCC的编译流程

分为四个步骤:

          预处理器     头文件*.h                         1.   预处理(Pre-Processing) 

2.编译(Compiling)                                                  3. 汇编(Assembling)    

          编译器                                                        4. 链接链接(Li(Linkiking))  

                                 

          引导代码引导代码

          目标代码*.o

库库函数数

链接

可执行文件

编译器的主要组件

l  分析器:分析分析器将将源语言言程序代序代码转换为转换为汇编语言言。因

    为要从一种格式转换为另一种格式(C到汇编),所以

    分析器需要知道目标机器的汇编语言分析器需要知道目标机器的汇编语言。

l   汇编器:汇编器将汇编语言代码转换为CPU可以执行字

    节码节码。

l   链接器 :链接器将汇编器生成的单独的目标文件组合成

    可执行的应用程序可执行的应用程序。链接器需要知道这种目标格式以便链接器需要知道这种目标格式以便 工作。

l  标准标准C库:核心的核心的CC函数都有函数都有一个主要的个主要的CC库来提供库来提供。如果在应用程序中用到了C库中的函数,这个库就会通过

链接器和源代码连接来链接器和源代码连接来生成最终的可执行程序成最终的可执行程序。

                

GCC的执行过程

l  调用cpp 进行预处理进行预处理,对源代码文件中的文件对源代码文件中的文件

包含(include)、预编译语句(如宏定义define) 进行分析;

l  调用cc1进行编译,生成.o为后缀的目标文件;

l  调用as进行汇编,汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件;

调用ld进行链接,所有的目标文件被安排在可执行程序中的恰当的位置执行程序中的恰当的位置。同时该程序所调程序用到的库函数也从各自所在的档案库中链接到合适的地方。


“hello”的演变历程

从左到右边

hello.c                    hello.i                   hello.s                     hello.o                   hello 

(text)                     (text)                    (text)                      (binary)                  (binary) 

 

          PrePre‐processor  Compiler  Assembler  Linker 

                                                                 printfprintf.oo 

 (binary) 

 

          (cpp /                     (cc1 /                     (as /                       (ld) 

          Gcc ‐E)                   Gcc ‐S)       Gcc‐c)                                                                           

 

你可能感兴趣的:(编译器类)