《程序员的自我修养》--静态链接
来源:互联网 发布:淘宝风衣长款外套 编辑:程序博客网 时间:2024/05/16 02:04
空间分配
例子:
/*a.c*/extern int shared;int main(){ int a = 100; swap(&a,&shared); return 0;}/*b.c*/int shared = 1;void swap(int *a,int *b){ int temp; temp = (*a); (*a) = (*b); (*b) = temp;}
/*编译步骤*/gcc -c a.c b.c
下面进行空间分配:
A 按序叠加
B 相似段合并
两步链接法
1 扫描输入文件,得到段属性,收集符号定义和引用,放到全局符号表,链接器得到每一个目标文件的段长,计算输出文件的合并段长和位置,建立映射关系。
2 读取文件中段数据和重定位信息,进行符号解析,重定位,和调整代码中地址。
重定位和符号解析
在其他目标文件中定义的变量或者函数(通称符号),编译器会把他们的地址暂时以0x00000000和0xFFFFFFFC代替,真正的计算过程则交给了链接器。链接器完成空间和地址的分配之后可以确定所有符号的虚拟地址,根据虚拟地址,对每一个需要重定位的指令修改。
需要重定位的指令: 这里会有一个重定位表,或称重定位段,加入代码段有序哟重定位的指令,则会有相应的.rel.data段。
重定位表的结构:
typedef struct { Elf32_Addr r_offset;//修正位置第一个字节相对于段的偏移 Elf32_Word r_info;//重定位入口符号和类型}Elf32_Rel;
静态库简述
出现原因:零散的目标文件提供给使用者,会有文件传输管理等不便,把这些目标文件压缩在一起,便于查找,形成libc.a静态库文件。
比如:
以下是通过解压printf.o得来的编译过程:
0 0
- 《程序员的自我修养》笔记--静态链接
- 程序员的自我修养 ch4 静态链接
- 《程序员的自我修养》--静态链接
- 程序员的自我修养(2)----静态链接
- 程序员的自我修养: 静态链接的过程
- 程序员的自我修养学习笔记——静态链接
- 【程序员的自我修养】第4章 静态链接
- 《程序员的自我修养》读书笔记1 -- 温故知新和静态链接
- 静态库链接(程序员的自我修养)
- <<程序员的自我修养>>第二章读书读书笔记----静态链接
- 程序员的自我修养——静态链接
- 程序员的自我修养: 动态链接
- 程序员的自我修养 ch7 动态链接
- 程序员的自我修养链接地地址
- 程序员的自我修养--链接,装载,库
- 程序员的自我修养-编译和链接
- 《程序员的自我修养》-编译和链接
- 程序员的自我修养(编译和链接)
- 475. Heaters
- 如何利用 AVDictionary 配置参数
- hdu ACM steps 1.2.7 hdu 2629
- jQuery Mobile插件
- ubuntu中安装chkconfig
- 《程序员的自我修养》--静态链接
- python学习笔记-基于flask的web服务提供
- 如何把本地时间转换成UTC(通用时间)
- EditText单行显示
- py模块下载总结
- 命令行解释器 串口
- 【转载】阿里巴巴常考面试题及汇总答案
- 第一方Cookie和第三方Cookie区别
- skia编译在windows下编译教程