天天看点

.c文件编译过程(二进制可执行文件生成过程以及链接器)

我们平时写的.c文件是如何编译的呢。下图很好的诠释了这一过程

.c文件编译过程(二进制可执行文件生成过程以及链接器)

主要有四个步骤

第一步预处理:使用预处理器(cpp)处理C语言文件中的预处理命令。这时候C语言文件还是一个.c文件.

第二部编译:使用C编译器gcc,将C语言源码文件编译成汇编文件file.s。

第三步汇编:使用汇编器as将汇编代码汇编成二进制的.o文件(又称目标文件)。

第四步链接:最后使用链接器ld将目标文件和目标文件中用到的一些库文件进行链接生成linux下elf格式的可执行文件,这个可执行文件才可以在linux平台下面运行。

下面是目标文件的链接过程

首选介绍下目标文件的构成:

.c文件编译过程(二进制可执行文件生成过程以及链接器)

每一个目标文件都由这三段组成

.c文件编译过程(二进制可执行文件生成过程以及链接器)

关于链接器简单讲就是一个组装器,它的作用是将目标文件(零件)组合成可执行文件(一台机器),链接脚本文件(安装图纸)的作用是决定目标文件中的某个段放在可执行文件中的位置。图中file就是可执行文件。

链接脚本文件:

.c文件编译过程(二进制可执行文件生成过程以及链接器)

注意这条指令:arm-linux-ld -o hello hello.o main.o -T hello.lds

ld是链接器,将多个目标文件(hello.o和main.o)链接生成一个可执行文件

(hello),通过-T指定链接脚本文件

继续阅读