链接 总结

<![endif]-->

  汗,本章已经是我第几次详细看了, 我居然看了一下午

  不的不佩服写的好呀



                     链接   总结

7.1 :编译过程

.c   .i( 中间文件 )   .s (汇编)   .o (可重定位目标文件)

     Cpp( 预处理器 )  ccl (编译器)   as (汇编器)

 

最后用 ld (链接器) 生成可执行文件

操作系统调用 loader (加载器)运行该文件,

 

7.2:

链接器完成任务

1)  符号解析: 引用到定义的一一对应

2)  重定   位: 定义与实际存储器位置连续起来

 

引用 -> 定义 ->  实际存储器位置

 

7.3

可重定位目标文件格式

.text   .rodata   . data   bss  symtab   rel.text  rel.rodate  debug   strtab    line

 

 

特别要注意 symtab  包含所有引用和定义的全局变量和函数   也包括 static 属性的全局变量,但是不包括有static 定义的局部变量。 

7.4 

强符号和弱符号

 

所以函数,已经初始化后的全局变量。

 

7.5        链接器是如何使用静态库来解析引用的? (重点)

 

 

Csap (p475)

这也说明了我们在用静态库的时候要特别注意他的顺序

7.6

重定位

1)  重定位节和符号定义

2)  重定位符号应用

7.7

Linux 运行时存储器映像  (这个特别重要)

7.8

使用共享库的时候要特别注意它的加载方式

-L  :   库路径

-l   :   库名

-I   :   库头文件


2011-06-23

 

更新:

1) 习题7.1 是很好的练习题。

2) 静态库和动态库的区别?? 

静态库: 运行时不用加载,没有进程都需要拷贝一份,浪费内存

动态库:  运行时加载,可能影响速度。 所有的内存都共享一份.text  ,节省内存。

 

总之,深刻理解了这一章,对以后编译是出错的问题能够有更好的思路。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值