看视频学习
C语言编译流程
- 编译
- 由C语言代码生成汇编代码
- 汇编
- 由汇编代码生成机器码
- 链接 Object
- 将多个机器码的目标文件链接成一个可执行文件
- 将多个机器码的目标文件链接成一个可执行文件
英文 | 解释 |
---|---|
compiler | 编译器 |
Assembly | 汇编 |
object file | 目标文件 |
link | 链接 |
Executable | 可执行 |
Static Library | 静态链接库 |
Linux下的可执行文件ELF
什么是可执行文件?
- 广义:文件中的数据是可执行代码的文件
- .out、.exe、.sh、.py
- 狭义:文件中的数据是机器码的文件
- .out、.exe、.dll、.so
可执行文件的分类
- .out、.exe、.dll、.so
- Windows:PE (Portable Executable 可移植可执行文件)
- 可执行程序
- .exe
- 动态链接库
- .dll
- 静态链接库
- .lib
- Linux:ELF (Executable and Linkable Format 可执行与可链接格式)
- 可执行程序
- .out
- 动态链接库
- .so
- 静态链接库
- .a
- 可执行程序
- 可执行程序
- ELF文件头表 (ELF header)
- 记录了ELF文件的组织
- 程序头表/段表 (Program header table)
- 告诉系统如何创建进程
- 生成进程的可执行文件必须拥有此程序
- 重定位文件不一定需要
- 节头表 (Section header table)
- 记录了ELF文件的节区信息
- 用于链接的目标文件必须拥有此结构
- 其他类型目标文件不一定需要