Linux Compile Toolchain

Get Started. It's Free
or sign up with your email address
Linux Compile Toolchain by Mind Map: Linux Compile Toolchain

1. 幻灯片

1.1. 结尾

2. 链接库

2.1. 动态库

2.1.1. 优点

2.1.1.1. 不用定期维护

2.1.1.2. 节省内存资源

2.1.1.3. 控制执行文件大小

2.1.2. 运行时被加载到内存并执行链接

2.2. 静态库

2.2.1. 将一组目标模块打包成为一个独立库, 静态库已.a结尾

2.2.2. 优点

2.2.2.1. 显示指定会十分繁琐且耗时, 直接引入节省时间

2.2.2.2. 链接时自动分析只会拷贝程序使用的目标模块

3. 链接器

3.1. 链接器定义

3.1.1. 链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。

3.2. 链接器好处

3.2.1. 加载共享库

3.2.2. 复用模块, 减少编译时间.

3.2.3. 开发大型应用程序

3.3. 链接器生成目标文件/可执行文件

3.3.1. 目标文件最终文件格式

3.3.1.1. ELF头

3.3.1.1.1. 描述整个文件的组织结构

3.3.1.2. .text

3.3.1.2.1. 编译产生的机器代码

3.3.1.3. .rodata

3.3.1.3.1. 只读数据

3.3.1.4. .data

3.3.1.4.1. 已初始化的全局变量

3.3.1.5. .bss

3.3.1.5.1. 未初始化的全局变量

3.3.1.6. .symtab

3.3.1.6.1. 符号表(符号表数据结构)

3.3.1.7. .rel.text

3.3.1.7.1. 代码需要重定位的位置

3.3.1.8. .rel.data

3.3.1.8.1. 数据需要重定位的位置

3.3.1.9. .debug

3.3.1.9.1. debug信息

3.3.2. 目标文件基础信息结构

3.3.2.1. 符号表

3.3.2.1.1. 文件内定义的符号

3.3.2.1.2. 文件中引入的外部符号(外部函数或变量)

3.3.2.2. 重定位表

3.3.2.2.1. 告诉链接器哪些位置进行重定向操作

3.3.3. 链接器生成的三种类型

3.3.3.1. 可被链接的文件(*.o)

3.3.3.1.1. 可重定位的文件, 可以和其他可重定位文件合成可执行文件

3.3.3.2. 可共享目标文件(*.so)

3.3.3.2.1. 特殊的可重定向文件, 可以在加载或运行时动态加载到内存运行

3.3.3.3. 可执行的文件

3.3.3.3.1. 可执行文件解析

3.3.4. 链接过程

3.3.4.1. 合并代码段

3.3.4.2. 合并数据段

3.3.4.3. 通过符号表修改指令访问的地址

3.3.5. 目标文件特点

3.3.5.1. 全部使用CPU可执行的二进制表示

3.3.5.2. 可执行文件的特点是具有MAIN函数