Other

[OS] 从源代码到可执行文件

2016-03-09  本文已影响94人  何幻

1. 预编译:

预编译过程主要处理那些源代码文件中的以“#”开始的预编译指令。
比如“#include”“#define”等。

主要处理规则如下:
(1)展开所有的宏
(2)处理所有的条件编译指令
(3)处理预编译指令,将被包含的文件递归插入到该预编译指令的位置
(4)删除所有的注释
(5)添加行号和文件名标识,以便编译器产生错误信息
(6)保留所有的“#pragma”编译器指令

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

<u></u>-E表示只进行预编译

2. 编译:

编译就是把预处理完的文件,进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件。

$ gcc -S hello.i -o hello.s

3. 汇编:

汇编器是将汇编代码转变成机器可以执行的指令,每一个汇编语句几乎都对应一条机器指令。

$ gcc -c hello.s -o hello.o

4. 链接:

一个复杂的软件,每个源代码模块独立编译,然后按需将它们组装起来,这个组装模块的过程就是链接。

链接过程主要包括:
(1)地址和空间分配(Address and Storage Allocation)
(2)符号决议(Symbol Resolution)
(3)重定位(Relocation)

每个模块的源代码文件(.c文件)经过编译器编译成目标文件(.o文件),目标文件和库一起链接形成最终可执行文件。

上一篇 下一篇

猜你喜欢

热点阅读