gcc如何完成编译链接:
A,编译阶段:预编译,编译,汇编
B,链接阶段
一,编译阶段
(注意:编译阶段每个源文件都是单独编译的)
main.c->main.i->main.s->main.o
1,编译阶段
预编译: gcc -E main.c -o main.i–》生成main.i
1,#include的展开
2,宏替换
3,删除注释
4,处理预编译指令
编译 gcc -S main.i->生成main.s
1,进行词法,语法的解析
2,代码优化
3,汇总符号 数据(全局 静态) 函数
汇编:gcc -c main.s–>生成main.o(可以直接生成main.o)
main.o(可重定位二进制目标文件)
1,将汇编指令翻译成二进制
2,生成各个setion
3,生成符号表
直接从main.c到main.o(直接通过预编译,编译,汇编)
gcc -c main.c -o main.o
常用链接
gcc 所生成的中间文件(gcc main.o或者gcc main.c)
gcc 所生成的中间文件 -o 自定义名字(gcc main.c -o main)
2,生成main.o后——>ELF文件格式->中间文件
ibjdump -h main.o–>(main.o文件的中间文件)
readelf -h main.o
3,可执行文件的ELF格式
二,链接阶段
三,进程的虚拟空间划分