动态链接程序启动时如何解析共享库、符号与重定位,运行时依赖为何会失效?
简答题困难907 次浏览
参考答案与解析
# 核心结论
动态链接程序启动时,内核先依据可执行文件格式映射程序段,并把控制权交给文件中指定的动态装载器。动态装载器读取依赖记录,按照平台搜索规则找到共享库,将其映射进进程虚拟地址空间,递归处理间接依赖,然后解析动态符号并执行重定位。外部函数既可以在启动阶段立即解析,也可以通过延迟绑定在第一次调用时解析。
运行时依赖会失效,是因为构建时“能找到某个库”并不等于部署时“会装载同一份库”。库文件缺失、搜索路径变化、处理器架构不匹配、间接依赖缺失、装载顺序变化、符号未导出、符号版本不匹配或二进制接口不兼容,都可能造成启动失败、首次调用失败,甚至发生更隐蔽的数据破坏。
# 底层机制
编译器对外部函数和全局对象生成未确定最终
