CSAPP 第七章 链接
7-1 编译器驱动程序
链接是将各种代码和数据收集并组合成一个文件的过程。
gcc -Og -o prog main.c sum.c
-Og 代码优化等级
-o prog 指定可执行文件的名字为prog
预处理
cpp -o main.i main.c 将源程序main.c翻译为main.i
- cpp是c preprocessor
- 可用 gcc -E -o main.i main.c 替代指令 -E 限制gcc只进行预处理
编译
cc -S -o main.s main.i
- cc是c compiler
- 可用 gcc -S -o main.s main.i 替代指令 -S 限制gcc只编译
汇编
as -o main.o main.s
- as是assembler
链接
ld -static -o prog main.o sum.o
- ld是链接器
运行
./prog
7-2 可重定位目标文件
gcc -c main.c
- -c编译选项表示值进行编译和汇编不执行链接操作。
wc -c main.o
- -c选项表示查看文件包含多少个字节
ELF:Executable and Linkable Format,可执行可链接格式。
反汇编 objdump -s -d main.o
- .text 存已经编译好了的机器代码
- .data 存初始化了且初始化不为0的全局变量。
- .bss 存未初始化或初始化为0的全局变量(不占用实际的空间)
- .roadata
7-3 符号和符号表
接7-2另外的几个section
- Symbol Table.symtab