Obwohl beide als "Linker" bezeichnet werden und zum Verknüpfen von Binärdateien verwendet werden, kann ich nicht wirklich herausfinden, wie sie sich voneinander unterscheiden. Kann mir jemand ihre Unterschiede erzählen?
Ohne zu technisch zu werden: Beide sind "Linker", dh ein Tool, das einen kompilierten Code mit / in einen anderen kompilierten Code kombiniert / lädt.
ld
ist ein statischer Linker, während ld.so
es sich um einen dynamischen Linker handelt.
so
Ich glaube, die Buchstaben stehen für "freigegebenes Objekt" und werden normalerweise als Dateinamensuffix für gemeinsam genutzte Bibliotheken angezeigt, dh Bibliotheken, die dynamisch mit Programmen verknüpft werden können (eine Bibliothek wird von mehreren Programmen "gemeinsam genutzt"). . Im Gegensatz dazu hat eine statische Bibliothek häufig das Dateinamensuffix .a
für "Archiv" (vom ar
Dienstprogramm erstellt).
Ein statischer Linker verknüpft ein Programm oder eine Bibliothek zur Kompilierungszeit, normalerweise als letzter Schritt im Kompilierungsprozess, und erstellt eine ausführbare Binärdatei oder eine Bibliothek. Im Fall einer ausführbaren Binärdatei kann es sich um eine statische Binärdatei handeln, bei der alle Bibliotheken in die Binärdatei selbst geladen sind, oder um eine dynamisch verknüpfte Binärdatei, bei der nur einige Bibliotheken statisch verknüpft sind.
Ein dynamischer Linker lädt die Bibliotheken, die zur Kompilierungszeit dynamisch verknüpft wurden, zur Laufzeit in den Adressraum des Prozesses.
Siehe die Handbücher für ld
und ld.so
auf Ihrem System.