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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)