动态链接器如何完成共享库装载、符号解析与延迟绑定
简答题困难725 次浏览
参考答案与解析
# 核心结论
动态链接把一部分依赖装载、符号查找和地址修正工作推迟到程序启动阶段,甚至推迟到函数第一次调用时完成。生成动态可执行文件时,链接器不会把全部共享库代码复制进可执行文件,而是记录所需共享库、动态符号表和重定位信息。程序启动后,内核映射可执行文件并把控制权交给动态链接器;动态链接器定位并映射依赖库,递归处理依赖,解析符号并完成必要重定位。延迟绑定则只在外部函数首次调用时解析该函数,后续调用直接使用已经写入跳转表的地址。
这种方式能够减少磁盘制品重复,并让多个进程共享库的只读代码页,但也引入启动成本、运行时搜索路径、装载顺序、符号冲突、二进制接口兼容和依赖劫持等问题。
# 底层机制
编译器遇到外部函数或全局对象
