ld ist der GNU-Linker aus den Binutils: Er setzt die vom Compiler erzeugten Objektdateien zu einem ausführbaren Programm oder einer Shared Library zusammen. Dabei löst er die undefined Symbole der einen Datei gegen die Definitionen anderer Dateien und Bibliotheken auf.
Die wichtigsten Optionen
ld -o programm datei1.o datei2.o # Objektdateien linken
ld -o programm -L/usr/lib -lm datei.o # Bibliothek im Pfad suchen
ld -shared -o libfoo.so datei.o # Shared Library bauen
ld -static -o programm datei.o # statisch linken
ld -r -o teil.o a.o b.o # relozierbaren Teil-Link
ld -T linker.ld -o programm datei.o # mit Linker-Skript
ld -s -o programm datei.o # Symboltabelle entfernen
Praxis-Beispiele
ld -o hallo hallo.oerzeugt das Programm; den Einstiegspunkt liefert standardmäßig das Symbol_start-L/pfad -lnamesucht nachlibname.a-Archiven oderlibname.so— Reihenfolge der Bibliotheken auf der Kommandozeile entscheidet über die Auflösung- Mit
-T datei.ldsteuert ein Linker-Skript, wohin Sektionen im Speicher landen — typisch für Embedded- und Kernel-Code - Im Alltag ruft man ld selten direkt auf: gcc-Befehle und andere Compiler-Frontends starten es selbst und reichen Optionen per
-Wl,...durch
Einordnung
Die Symboltabelle ist die Sprache, in der Linker und Objektdateien kommunizieren — ld verknüpft die Teile, die nm-Befehle sichtbar machen. Das Ergebnis ist ein lauffähiges Programm, dessen Struktur sich mit readelf-Befehle und objdump-Befehle inspizieren lässt.
Verwandte Grundlagen: nm-Befehle (Symbole), addr2line-Befehle (Adressen).