了解动态链接器

时间:2018-11-08 15:43:08

标签: linker elf

我想知道为什么动态链接程序必须在哪个库中搜索哪个函数。

可以通过编译时链接程序将此信息放入elf文件吗?

完成此操作后,动态链接程序可以直接查找功能而不是进行搜索。

1 个答案:

答案 0 :(得分:0)

  

我想知道为什么动态链接程序必须在哪个库中搜索哪个函数。

与在静态链接时记录在哪个共享库中定义符号相反,并仅在 中搜索该库,类似于在Windows上发生的情况?

有几个原因:

  1. 最初,共享库旨在模拟存档库,通常有多个存档库定义相同的符号。
  2. 事实证明,记录库名称的 not 允许在运行时插入符号,尤其是对于LD_PRELOAD
  3. 在通常情况下,只有几个共享库,搜索其他库并不会花费那么多(搜索是通过哈希表而不是线性方式完成的。)

对于(1),您仍然可以记录定义符号的 first 库。

对于(3),turns out某些构建系统违反了通常的情况(具有10,000个共享库),并且搜索所有构建系统的开销变得非常大。尽管有一些方法可以避免这种开销,而又不会使常规的符号查找规则无效。