C语言编译与链接原理深度解析
📚 共计 30 章节
01
编译概述
从源代码到可执行文件的旅程,为什么需要编译和链接。
入门
全景
02
预处理详解
头文件包含、宏定义、条件编译、#pragma指令。
预编译
宏
03
词法分析
如何将源代码拆分成Token,有限状态机的应用。
词法
FSM
04
语法分析
上下文无关文法、抽象语法树(AST)的构建。
语法
AST
05
语义分析
类型检查、作用域解析、符号表的建立。
语义
符号表
06
中间代码生成
三地址码、静态单赋值形式(SSA)。
IR
SSA
07
代码优化
常量折叠、死代码消除、循环优化。
优化
性能
08
目标代码生成
指令选择、寄存器分配、指令调度。
后端
寄存器
09
汇编器原理
从汇编代码到机器码,重定位信息的生成。
汇编
机器码
10
目标文件格式
ELF文件结构深度剖析,节区与段。
ELF
格式
11
符号与符号表
全局符号、局部符号、强符号与弱符号。
符号
链接
12
重定位基础
静态重定位与动态重定位,重定位表。
重定位
地址
13
静态链接原理
符号解析与重定位,链接器脚本。
静态链接
脚本
14
库与归档文件
静态库(.a)的创建与使用,ar工具。
静态库
ar
15
动态链接原理
位置无关代码(PIC),全局偏移表(GOT)。
动态链接
PIC
16
动态链接器
ld-linux.so的工作流程,延迟绑定(PLT)。
ld-linux
PLT
17
加载与运行时
程序加载过程,进程地址空间布局。
加载
内存布局
18
C运行时启动
_start入口,crt0/crt1,main函数调用链。
启动
crt
19
内存对齐与填充
结构体对齐,数据段对齐策略。
对齐
结构体
20
链接器脚本深入
MEMORY命令,SECTIONS命令,定位符号。
脚本
链接器
21
可执行文件生成
入口点设置,段合并与填充。
可执行
段
22
调试信息格式
DWARF标准,stabs,调试符号表。
DWARF
调试
23
编译优化与链接优化
LTO(链接时优化),IPO。
LTO
IPO
24
交叉编译
目标平台与宿主机,工具链配置。
交叉编译
工具链
25
模块化编译
分离编译,Makefile与构建系统。
Makefile
构建
26
增量编译与缓存
ccache,distcc,构建加速。
ccache
加速
27
常见编译错误解析
链接错误、符号未定义、多重定义。
错误
调试
28
ABI与调用约定
cdecl,stdcall,fastcall,x86-64 ABI。
ABI
调用约定
29
编译器前端与后端
GCC架构,LLVM架构,Clang。
GCC
LLVM
30
实战:手写极简链接器
理解核心流程,从零实现链接器。
实战
链接器