链接程序和库指南

缺省符号查找

动态可执行文件及随其装入的所有依赖项都被指定了 world 搜索范围和 global 符号可见性。 请参见符号查找。针对动态可执行文件或随其装入的任何依赖项的符号查找会导致搜索每个目标文件。运行时链接程序将从动态可执行文件开始,并按目标文件的装入顺序搜索每个依赖项。

如以上各节中所述,ldd(1) 将按依赖项的装入顺序列出动态可执行文件的依赖项。例如,共享库 libbar.so.1 需要符号 foo 的地址来完成重定位。动态可执行文件 proglibbar.so.1 指定为其依赖项之一。


$ ldd prog

        libfoo.so.1 =>   /home/me/lib/libfoo.so.1

        libbar.so.1 =>   /home/me/lib/libbar.so.1

运行时链接程序首先会在动态可执行文件 prog 中查找 foo,然后在共享库 /home/me/lib/libfoo.so.1 中查找,最后在共享库 /home/me/lib/libbar.so.1 中查找。


注 –

符号查找操作的开销可能很大,尤其是在符号名称大小和依赖项数目增加的情况下。这方面的性能将在性能注意事项中详细介绍。有关替代查找模型,请参见直接绑定


缺省重定位处理模型还允许转换为延迟装入 (lazy loading) 环境。如果在当前装入的目标文件中找不到某符号,则会处理所有暂挂的延迟装入目标文件,以尝试查找该符号。此装入是对尚未完整定义其依赖项的目标文件的补偿。但是,该补偿可能会破坏延迟装入的优点。