首页 > 代码库 > gcc编译流程

gcc编译流程

gcc的编译流程分为四个步骤,分别为:

  1. 预处理(Pre-Processing)
  2. 编译(Compiling)
  3. 汇编(Assembling)
  4. 链接(Linking)

  以hello.c为例子,在这四个步骤中可以设置选项分别生成hello.i, hello.s, hello.o以及最终的hello文件:
      hello.c : 最初的源代码文件;
      hello.i : 经过编译预处理的源代码,将会把#开头的文件进行处理,包括宏以及包含等等,使用gcc -E(大写)命令可以输出此文件查看(注意:不会检查语法,仅仅只是替换而已);
      hello.s : 汇编处理后的汇编代码,使用-S(大写)来进行查看,此命令使得编译器之编译不汇编,此处生成汇编代码;
      hello.o : 编译后的目标文件,即含有最终编译出的机器码,但它里面所引用的其他文件中函数的内存位置尚未定义。汇编阶段是把编译阶段生成的”.s”文件转成目标文件,使用-c(小写)来查看二进制代码。
  a.out:linux下最终的可执行文件。
  .a是静态库,.so(Shared Object)是动态库,.s汇编原文件
 
库函数:系统把这些函数实现都被做到名为libc.so.6的库文件中去了,在没有特 别指定时,gcc会到系统默认的搜索路径”/usr/lib”下进行查找
gcc在编译时 默认使用动态库。
共享archive的文件名形式是libname.sa。共享archive只是一种过渡形式,帮助人们从静态库转变到动态库。)

gcc编译流程