-
Ano, při inicializaci se připojí. Technicky dynamický linker nepotřebuje rozlišení a přemístění objektů pro sebe, protože je plně vyřešen tak, jak je, ale definuje symboly a musí se o ně postarat při řešení binárního kódu, který „interpretuje“, a tyto symboly jsou aktualizovány. ukázat na jejich implementace v načtených knihovnách. Konkrétně to ovlivňuje
malloc— linker má vestavěnou minimální verzi s odpovídajícím symbolem, ale ta je po načtení a přemístění nahrazena verzí knihovny C (nebo dokonce vloženou verzí, pokud nějaká existuje), přičemž je třeba dbát na to, aby se tak nestalo se to nestane v okamžiku, kdy by to mohlo přerušit linker.Krvavé podrobnosti jsou v
rtld.c, vdl_mainfunkce.Všimněte si však, že
ld.sonemá žádné vnější závislosti. Můžete vidět symboly spojené snm -D; žádný z nich není nedefinovaný. -
Manuálová stránka odkazuje pouze na položky přímo pod
/lib, tj./lib/ld.so(dynamický linker libc 5, který podporujea.out) a/lib*/ld-linux*.so*(dynamický linker libc 6, který podporuje ELF). Manuálová stránka je velmi specifické ald.soneníld-2.28.so.Dynamický linker, který se nachází na velké většině současných systémů, nezahrnuje
a.outpodporu.
file a ldd hlásit různé věci pro dynamický linker, protože mají různé definice toho, co tvoří staticky propojenou binární hodnotu. Pro ldd , je binární soubor staticky propojen, pokud nemá DT_NEEDED symboly, tj. žádné nedefinované symboly. Pro file , binární soubor ELF je staticky propojen, pokud nemá PT_DYNAMIC sekce (toto se změní ve verzi file následujících 5,37; nyní používá přítomnost PT_INTERP sekce jako indikátor dynamicky propojeného binárního souboru, který odpovídá komentáři v kódu).
Dynamický linker knihovny GNU C nemá žádné DT_NEEDED symboly, ale má PT_DYNAMIC sekce (protože jde technicky o sdílenou knihovnu). Výsledkem je ldd (což je dynamický linker) označuje, že je staticky propojen, ale file označuje, že je dynamicky propojen. Nemá PT_INTERP část, takže příští vydání file bude také indikovat, že je staticky propojen.
$ ldd /lib64/ld-linux-x86-64.so.2
statically linked
$ file $(readlink /lib64/ld-linux-x86-64.so.2)
/lib/x86_64-linux-gnu/ld-2.28.so: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped
(s file 5.35)
$ file $(readlink /lib64/ld-linux-x86-64.so.2)
/lib/x86_64-linux-gnu/ld-2.28.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped
(s aktuálně vyvíjenou verzí file ).