链接原理

这篇博客详细介绍了链接的四种类型:静态目标文件链接、静态库链接、动态共享库链接以及动态共享库加载。重点阐述了链接器在符号解析和重定位中的作用,以及动态链接库如何在运行时被加载和解析。文章引用了《深入理解计算机系统》的相关内容。

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

链接分为静态目标文件链接,静态库链接,动态共享库链接,动态共享库加载四种。

1.1      静态目标文件链接

每个代码文本文件都生成一个.O文件,链接器链接所有的目标文件到一个可执行文件。

链接器完成的两个任务有:

1.     符号解析。就是为每一个未知的符号找到它的定义。

2.     重定位。编译阶段生成的目标文件都是从地址0开始的,链接器修改这些地址。


1.2      静态库链接

静态库可以认为是一堆.O文件的打包,有一个文件头来描述每个成员目标文件的大小和位置,后缀名为.a。链接就是从中抽取O文件,然后链接成一个可执行文件。


1.3      动态共享库链接

共享库在linux平台上后缀名为so,在windows平台上后缀名为dll。 基本思路是当创建可执行文件时,静态执行一些链接,然后在可执行文件运行前加载时,动态完成链接过程。注意,没有任何so库的内容能拷贝到可执行文件中,而只是拷贝了一些重定位和符号表信息,它们运行时可以解析so。当加载器加载可执行文件时,它注意到可执行文件包含一个interp节,这个节包含动态链接库的路径名。动态链接器本身就是一个共享目标(如ld-linux.so),加载器不是去把控制传给应用,而是加载和运行这个动态链接器,完成重定向后,最终将控制传递给应用程序。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值