前言: 每一个编译的 .c 文件,到可执行的obj文件,都会经历一系列的操作,使计算机运行程序;
下图所示: 一个 c文件转换到exe文件再到obj文件,其中c文件转换到exe文件需要翻译环境的编译器进行预编译,编译,汇编和连接器进行链接四步操作,得到exe,具体过程如下:
左图表示c文件经过预编译, 编译,汇编的过程,add ,main为全局变量,add为外部函数,因此出 |
预编译阶段 (test.c -E > tese.i) : 1.C文件所包含的头文件会完成包含 2.#define定义的符号和宏会完成替换 3.注释删除
编译阶段(tese.i -S >test.s ): C语言的代码转化成汇编代码, 进行语法分析,词法分析,语义分析,符号汇总
汇编阶段(test.s - C > test.o(test.obj) ): 生成符号表 ,将汇编代码转换为机器指令(二进制指令), 文件变为test.o (elf格式) 可以使用readelf工具阅读文件。
链接阶段: 将多个目标文件和连接库进行链接 将每个文件的段表合并,以及符号表的合并和重定位。