程序编译阶段

程序编译一般有如下几个过程:

  • 预处理
  • 编译
  • 汇编
  • 链接

预处理阶段

(预处理器)对包含源代码的文本文件进行处理,如包含头文件、引入宏定义等,生成预处理文件(.i)。
clang生成预处理文件:
$ clang -E test.c -o test.i

-E:只运行预处理步骤
-o:输出到目标文件

编译阶段

(编译器)将预处理文件(.i)翻译成汇编文件(.s)。
汇编文件的每条语句都以一种标准的文本格式确切地描述一条低级机器语言指令,是不同高级语言的通用输出语言。
$ clang -S test.i

-S:只运行预处理和编译步骤

汇编阶段

(汇编器as)将汇编文件翻译成机器语言,将翻译后的指令打包成目标文件(.o)。
$ clang -c test.s

-c:只运行预处理,编译和汇编步骤

链接阶段

详见程序编译与执行的那些事(2):静态链接库、动态链接库