红联Linux门户
Linux帮助

linux 分解gcc

发布时间:2007-01-02 10:26:52来源:红联作者:linuxcms
  在学习使用GCC之前,下面的这个例子能够帮助用户迅速理解GCC的工作原理。首先用熟悉的编辑器输入清单1所示的代码:

  清单1:

引用:
hello.c
#include
int main(void)
{
printf ("Hello world, Linux programming!\n");
return 0;
}


  然后执行下面的命令编译和运行这段程序:

引用:
# gcc hello.c -o hello
# ./hello
Hello world, Linux programming!


  从程序员的角度看,只需简单地执行一条GCC命令就可以了,但从编译器的角度来看,却需要完成一系列非常繁杂的工作。

  首先(预处理),GCC需要调用预处理程序cpp,由它负责展开在源文件中定义的宏,并向其中插入“#include”语句所包含的内容;
  接着(编译和汇编),GCC会调用ccl和as将处理后的源代码编译成目标代码;
  最后(链接),GCC会调用链接程序ld,把生成的目标代码链接成一个可执行程序。

  为了更好地理解GCC的工作过程,可以把上述编译过程分成几个步骤单独进行,并观察每步的运行结果。

  第一步是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程:

  # gcc -E hello.c -o hello.i

  此时若查看hello.i文件中的内容,会发现stdio.h的内容确实都插到文件里去了,而其它应当被预处理的宏定义也都做了相应的处理。

  第二步是将hello.i编译为目标代码,这可以通过使用-c参数来完成:

  # gcc -c hello.i -o hello.o

  GCC默认将.i文件看成是预处理后的C语言源代码,因此上述命令将自动跳过预处理步骤而开始执行编译过程,也可以使用-x参数让GCC从指定的步骤开始编译。

  最后一步是将生成的目标文件链接成可执行文件:

  # gcc hello.o -o hello

  仍想知道它的每一步内的实现原理,希望在以后的学习中能够了解。
文章评论

共有 0 条评论