gcc编译程序的时候可以分为四个部分:
(来自于<<程序员的自我修养>>)
- 预处理(Prepressing)
- 编译(Compilation)
- 汇编(Assembly)
- 链接(Linking)
预编译阶段:
gcc -E hello.c -o hello.i
主要工作为
- 展开所有的宏定义,删除#define
- 处理所有的条件预编译指令,如#if、#ifndef等
- 处理#include,把头文件的代码复制到#include出,且是递归进行,也就是#include过来的里面可能还需要#include,所以需要加#ifndef来防止重复
- 删除所有的注释
- 添加行号和文件标识符
- 保留所有的#pragma编译器指令,编译器要使用他们
编译过程:
gcc -S hello.i -o hello.s
把预处理完之后的文件进行一系列的词法分析、语法分析、语义分析以及优化生成相应的汇编代码文件。
汇编过程:
gcc -c hello.s -o hello.o
将汇编代码转换为机器可以执行的指令
链接过程:
标签:汇编,gcc,静态,hello,编译,include,链接 From: https://www.cnblogs.com/hailanben/p/17280378.html