程序在其生命周期中的不同格式

程序的生命周期

  1. C语言
  2. 机器语言指令
  3. 按照可执行目标文件打包
  4. 以二进制磁盘文件存放

从源文件到目标文件

即生命周期的 1 ~ 3阶段。

执行程序

在Unix上,这一转化由编译器驱动程序完成。

gcc -o hello hello.c

四阶段

  1. 预处理器 cpp

    • 根据 # 开头的命令,修改C程序的文本
    • 得到 .i 文本文件

    例如 #include,将头文件的内容直接插入到程序文本中

  2. 编译器 ccl

    • 翻译成汇编语言程序
    • 得到 .s 文本文件
  3. 汇编器 as

    • 翻译成机器指令语言

    • 将指令打包成可重定位目标程序

    • 得到 .o 二进制文件

      在文本编辑器中打开 .o 文件,将看到一堆乱码

  4. 链接器 ld

    每个C编译器都提供标准C库,库函数以已经预编译好的.o文件存在。

    • 将库函数的 .o 文件与原 .o 文件进行合并

    • 得到可执行文件

      在Unix中,可执行文件无后缀;在win中为.exe

文件类型

汇编器之前的文件,都是文本文件;

汇编器之后的文件,都是二进制文件。


GNU项目

  • EMACS编辑器
  • GCC编辑器
  • GDB调试器
  • 汇编器
  • 链接器
  • 处理二进制文件工具
  • 其他部件