gpt4 book ai didi

Linux ELF - 为什么正常链接运行速度比 'ldd -r' 更快?

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:13 24 4
gpt4 key购买 nike

我有一个 exe,其中的任何代码都没有更改,但我担心它链接到的符号在其共享对象上不再存在。我找到了两种方法来测试:

  • 运行ldd -r
  • 重新链接 exe

在某些情况下,重新链接似乎比运行 ldd -r 更快。这是什么原因?

最佳答案

In some cases it seems like relinking is faster than running ldd -r what is the reason for this?

考虑一个简单的情况:main.olibfoo.so调用foo(),并且链接如下:

gcc main.o -L. -lfoo

ld 要做的工作量:发现 foo 正在被调用,发现它是在 libfoo.so 中定义的,完成。工作量不大。

现在假设 libfoo.so 本身已链接到 libbar.so,并从中调用 10000000 个不同的符号。

ldd -r 有什么作用?它首先会在 a.out 中查找任何未解析的符号(只有一个:foo),并在 libfoo.so 中找到它的定义(简单)。接下来,它必须考虑 libfoo.so 中的每个 undefined symbol ,并找到所有这些符号的定义(在 libbar.so 中)。这大约困难100万倍。对 libbar.so 以及链接到其中的所有其他库重复此操作。

因此,在上述条件下,ld 花费的时间将明显少于 ldd -r

关于Linux ELF - 为什么正常链接运行速度比 'ldd -r' 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30833427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com