第6篇gcc编译器linux.ppt

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GCC编译器 初识GCC GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套 GNU编译器套装 以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix及苹果电脑 Mac OS X 操作系统的标准编译器。 GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。 GCC是什么? GCC: GNU Compiler Collection; GCC支持多种硬件平台和操作系统,能编译多种语言(C, C++, Java, Ada95, Objective C, .etc); GCC与G++的关系: GCC用于编译多种语言编写的程序,主要是C; G++用于编译C++程序,以GCC为基础,编译过程中加入了C++的支持库,参数与GCC基本一致; 可以利用GCC编译C++程序,但是需要在参数中加入引用的C++库,比如libstdc++ (如gcc -o out –lstdc++ main.cc)。 可执行程序的生成过程 预处理(Preprocessing):分析各种预处理命令,如#define, #include, #if等; 编译(Compilation): 根据输入文件产生汇编语言的程序; 汇编(Assembly): 将汇编语言输入,产生扩展名为.o的目标文件; 链接(Linking):以.o目标文件,库文件作为输入,生成可执行文件; 预编译过程 预编译又称为预处理,是做些代码文本的替换工作。 处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等。 就是为编译做的预备工作的阶段 该阶段会生成一个中间文件*.i,但实际工作中通常不用专门生成这种文件,因为基本上用不到;若非要生成这种文件不可,可以利用下面的示例命令: 常见的预编译指令 常见的预编译指令处理以下指令: (1)#include 指令:头文件包含指令 (2)#define指令 :宏定义指令 (3)#if、#else和#endif指令:条件编译指令 (1)#include 指令 :头文件包含指令  该指令指示编译器将xxx.xxx文件的全部内容插入此处。若用括起文件则在系统的INCLUDE目录中寻找文件,若用“ ”括起文件则在当前目录中寻找文件。一般来说,该文件是后缀名为“h”或“cpp”的头文件。 一般为/usr/include路径   注意:不会在当前目录下搜索头文件,如果我们不用而用把头文件名扩起,其意义为在先在当前目录下搜索头文件,再在系统默认目录下搜索。 (2)#define指令 :宏定义指令  该指令常用有二种用法:   第一种是定义标识,标识有效范围为整个程序,形如#define XXX,常与#if配合使用;   第二种是定义常数,如#define max 100,则max代表100; (3)#if、#else和#endif指令:条件编译指令 条件编译指令 程序员在源程序中通过定义不同的宏来决定编译程序对哪些代码进行处理。 查看预编译后文件举例 预编译结果 预编译结果 预编译结果 预编译结果 预编译结果 预编译结果 ………… ………… ………… ………… ………… ………… ………… ………… ………… ………… ………… 预编译结果 编译 经预编译后,将生成新的源程序(中间文件.i或.ii)。 在新程序中,只有常量、变量的定义,以及C语言关键字信息。 编译程序将通过词法分析和语法分析,确认所有指令都符合规则,并将其编译成汇编代码。 在编译阶段,输入的是中间文件*.i,编译后生成汇编语言文件*.s 。这个阶段对应的GCC命令如下所示: 汇编 使用GCC编译,缺省下是不会输出汇编代码文件的。 如需查看汇编代码文件,可以在编译时制定-S选项。 例:编译文件example8_3.c?example8_3.s 例:编译后的汇编语言文件example8_3.c?example8_3.s 汇编 在汇编阶段,将输入的汇编文件*.s转换成机器语言*.o。这个阶段对应的GCC命令如下所示: 连接阶段 最后,在连接阶段将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。这一步骤,可以利用下面的示例命令完成: 连接阶段 迄今为止,我们谈论的程序仅涉及到一个源文件;现实中,一个程序的源代码通常包含在多个源文件之中,这该怎么办?没关系,即使这样,用GCC处理起来也并不复杂

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档