linker - Linux ELF - Why does normal linking run faster than 'ldd -r'? -


i have exe in none of code changed, afraid links symbols no longer exist on shared objects. found 2 ways test that:

  • run ldd -r
  • relink exe

in cases seems relinking faster running ldd -r reason this?

in cases seems relinking faster running ldd -r reason this?

consider simple case: main.o calls foo() libfoo.so, , linked this:

gcc main.o -l. -lfoo 

the amount of work ld has do: discover foo being called, find defined in libfoo.so, done. not work.

now suppose libfoo.so has been linked against libbar.so, , calls 10000000 different symbols it.

what ldd -r have do? first in a.out unresolved symbols (there one: foo), , find definition in libfoo.so (easy). next has consider every undefined symbol in libfoo.so, , find definition of them (in libbar.so). 1000000 times harder. repeat libbar.so, , every other library linked it.

it should not surprising under above conditions ld take less time ldd -r.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -