- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 常用开发工具 Linux上有许多实用工具,常用的工具包括编译开发工具、文本编辑工具、办公套件、网络管理及安全等。Linux上常用的工具,有编译开发工具GCC、文本编译工具vi、办公套件OpenOffice、网络管理工具ARP、arpwatch、ifconfig、netstat和TCPDump,以及安全工具GnuPG和OpenSSH等。通过这些讲解对Linux的常用工具有一定的认识,并经过不断地实践,进而熟练地掌握它们。 主要内容 gcc编译系统的概念和使用 gdb程序调试工具的概念和使用 程序维护工具make 的概念和使用 6.1 gcc编译系统 Linux系统下的GCC是自由软件基金会(Free Software Foundation)推出的多平台编译器,是一个开源软件,并且功能强大、性能优越,能够支持C、C 和FORTRAN等多种语言。同时,GCC还是一个交叉编译器,可以把源代码编译成在其它硬件平台上运行的可执行代码。用GCC编译后生成的代码与一般的编译器相比,平均执行效率要提高20%~30%。GCC的最新版本可以从网站/上取得。 GCC(GNU Compiler Collection 是Linux社区最好的编译器,也是以前的GNUC编译器。1999年中,egcs和GCC工程合并成为一个编辑器套装,同年10月发布GCC2.95.2。 GCC集成了C、C++、Objective C、Fortran、Java等语言编辑器。 开放、自由和灵活是Linux的魅力所在,这一点在GCC上的体现就是程序员通过它能够更好地控制整个编译过程。在使用GCC编译程序时,编译过程可以细分为四个阶段:预处理(Pre-processing)、编译(Compiling)、汇编(Assembling)和链接(Linking)。 6.1.1 文件名后缀 很多OS支持的文件名都由两部分构成: 文件名和后缀(扩展名),二者间用圆点分开。同样,Linux系统也用后缀来区分不同类型的文件。在gcc命令行上可以使用有不同后缀的文件。如下表列出了常用的文件名后缀及其表示的文件类型。 6.1.1 文件名后缀(续) 6.1.2 C语言编译过程 一个完整的C语言程序可以存放在多个文件中,包括C语言源文件、头文件及库文件。头文件不能单独进行编译,它必须随C语言源文件一起进行编译。 Gcc编译程序时,其编译过程分为四个阶段:预处理、编译、汇编和连接,并且始终按这个顺序执行。 6.1.2 C语言编译过程(续) 1.预处理阶段 预处理是常规编译 之前预先进行的工作, 故此得名。它读取C语言 源文件,对其中以“#” 开头的指令(伪指令) 和特殊符号进行处理。 主要包括文件包含、宏 定义和条件编译指令。 6.1.2 C语言编译过程(续) (1)预处理程序(Preprocessor)将以#include行所指出的文件替代该指令行,包含的文件可能是大量的宏定义、各种外部符号的声明及另外的头文件。文件包含有两种形式: #include 文件名 #include “文件名” 对于前者,预处理程序会在/usr/include 目录下寻找该文件;对于后者,预处理程序则首先在当前工作目录中寻找,找不到时再到标准目录(即/usr/include)中去查找。 (2)预处理程序对C语言源程序中的所有宏名进行替换。 例如:#define EOF -1 预处理程序会把程序中有EOF的部分以-1替代。 另外,对带参数的宏也会作参数的替换。 6.1.2 C语言编译过程(续) (3)预处理程序对条件编译指令(如#ifdef, #ifndef,#else, #elif, #endif等)将根据有关的条件,把某些代码过滤掉,使之不进行编译。 (4)预处理程序对于源程序中出现的_LINE,_FILE_等预先定义好的宏名,将用合适的值进行替换;对#line,#error和 #pragma分别进行相应的处理。 6.1.2 C语言编译过程(续) 2.编译阶段 编译程序(Compiler)对预处理之后的输出文件进行词法分析和语法分析,试图找出所有不符合语法规则的部分 。在确定各成分符合语法规则后,将其“翻译”为功能等价的中间代码表示或者汇编代码。 3.汇编过程 汇编过程是汇编程序(Assembler)把汇编语言代码翻译成目标机器代码的过程 目标文件由机器码构成。通常它至少包含有代码段和数据段。 6.1.2 C语言编译过程(续) 4.连接阶段 连接程序(Linker)要解决外部符号访问地址问题,也就是将一个文件中引用的符号与该符号在另外一个文件中的定义连接起来,从而使有关的目标文件练成一个整体,最终成
文档评论(0)