第五章 对链接的思考

本文对比了动态链接和静态链接两种方式的特点与优劣。动态链接可以提高程序性能,节省资源,并简化库文件的更新过程;而静态链接则将库文件直接包含在可执行文件中。文章还探讨了链接过程中的注意事项及如何识别不同类型的库文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,动态链接:可执行文件只包含了文件名,让载入器运行时寻找程序所需要的函数库.
程序在运行时寻找它们,而不是把这些函数的二进制码作为自身可执行文件的一部分.
静态链接:函数库的一份拷贝是可执行文件的物理组成部分.

2,动态链接提高性能:
(1)尽管单个可执行文件的启动速度稍受影响,但是动态链接可执行文件比功能相同的静态文件小,可以节省磁盘空间和虚拟内存.
(2)所有动态链接到同一个函数库的可执行文件在运行时共享这个函数库的同一份拷贝.
如果是静态链接,每个文件都拥有函数库的一份物理拷贝,显然极为浪费.
(3)动态链接库的版本升级更容易.
注:动态链接是一种"just-in-time"链接,意味着程序运行时必须能够找到它们所需要的函数库.

3,动态库文件的扩展名".so",静态库文件的扩展名".a".
4,观察头文件,确认所使用的函数库.
每个头文件可能代表一个必须链接的库.
一个函数库包括多个函数,这些函数的声明可能散布于多个头文件中.

5,静态链接和动态链接在链接语义上存在重大区别:
(1)动态链接中,所有的库符号进入输出文件的虚拟地址空间中,所有的符号对于链接在一起的所有文件都是可见的.
(2)对于静态链接库,只是载入载入器当时所知道的未定义符号.
因此:命令行中各个静态链接库出现的顺序是非常重要的.
建议:始终将-l 函数库 放在编译命令行的最右边.

6,警惕:Interpositioning
通过编写与库函数同名的函数来取代该函数库的行为.
注:这样做后,不仅你自己对库函数的调用将被自己版本的函数调用所取代,而且所有调用该库函数的系统调用也将调用你自己的那个函数版本.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值