
Obwohl beide als „Linker“ bezeichnet werden und zum Verknüpfen von Binärdateien verwendet werden, kann ich nicht wirklich herausfinden, worin sie sich voneinander unterscheiden. Kann mir jemand die Unterschiede erklären?
Antwort1
Ohne zu technisch zu werden: Bei beiden handelt es sich um „Linker“, also ein Tool, das einen Teil kompilierten Codes mit/in einen anderen Teil kompilierten Codes kombiniert/lädt.
ld
ist ein statischer Linker, während ld.so
ein dynamischer Linker ist.
Die Buchstaben so
sind, glaube ich, die Abkürzung für „shared object“ und Sie werden es normalerweise als Dateinamensuffix von gemeinsam genutzten Bibliotheken sehen, also Bibliotheken, die dynamisch in Programme eingebunden werden können (eine Bibliothek wird von mehreren Programmen „gemeinsam genutzt“). Im Gegensatz dazu hat eine statische Bibliothek oft das Dateinamensuffix .a
, für „Archiv“ (vom ar
Dienstprogramm erstellt).
Ein statischer Linker verknüpft ein Programm oder eine Bibliothek zur Kompilierzeit, normalerweise als letzter Schritt im Kompilierprozess, und erstellt eine binäre ausführbare Datei oder eine Bibliothek. Im Fall einer binären ausführbaren Datei kann es sich um eine statische Binärdatei mitalleBibliotheken, die in die Binärdatei selbst geladen wurden, oder es kann sich um eine dynamisch verknüpfte Binärdatei handeln, in die nur einige Bibliotheken statisch verknüpft sind.
Ein dynamischer Linker lädt die zur Kompilierzeit dynamisch verknüpften Bibliotheken zur Laufzeit in den Adressraum des Prozesses.
Weitere Informationen finden Sie in den Handbüchern für ld
und ld.so
auf Ihrem System.