3。2 Gcc和Gdb编译调试技术
3。2。1 Gcc编译技术
Gcc是由Gnu开发的编程语言编译器,原本作为Gnu操作系统的官方编译器,现在已被大多数类Unix操作系统采纳为标准的语言编译器[9]。Gcc的外部接口像一个的Unix编译器,使用者在命令列下键入gcc和程序名,以及命令参数,方便决定每个输入的档案使用的语言编译器,并为输出程序码调用合适此硬件平台的组合语言编译器,而且选择地执行连接器以产生可执行的程序[10]。
传统意义上的编译程序分为两部分--编译和链接。而Gcc在编译时要经历预处理,编译,汇编和链接四个阶段[11]:来:自[优E尔L论W文W网www.youerw.com +QQ752018766-
(1)预处理阶段
处理#include和#define是预处理阶段的主要目标,把原本包含在#include里的。h文件插入进#include代码所在的位置,把在程序中用到的#define宏定义用确切的字符串替代,可以用-E命令要求gcc只进行到预处理阶段而不开始往后的三个阶段,如命令gcc -E test。c -o test。i,gcc会对test。c进行预处理产生test。i文件, -E命令告诉gcc只进行预处理阶段,-o命令告诉gcc输出文件为test。i,当然也可以选择test。i为其它名字,如test。i,但后缀名一定要是。i,因为是约定俗成的规则,假如省略掉上面命令中的-o test。i的话,gcc也会依照输入文件test。c把输出文件的名字命名为test。i。这个阶段只能进行。c类型的文件处理。
(2)编译阶段
编译阶段是所有处理阶段中最重要的阶段,在这个阶段中首先gcc会检查语法然后把由上一阶段处理生成的*。i编译成为*。s文件。可以用这样的命令告诉gcc进行处理,gcc -S test。i -o test。s,-S命令意思是使gcc把test。i编译成为。s文件,以上这两个处理步骤的输出文件类型都是文本文件,可以使用文本工具阅读这些处理后的文件。在这个阶段。c和。i类型的文件都可以被处理。