ld(1) ld(1)
NAME
ld - Binder für Objektdateien
SYNTAX
ld [option ...] file ...
BESCHREIBUNG
Das Kommando ld bindet mehrere Dateien mit relokierbarem Objektcode,
führt die Relokation durch und löst extern definierte Symbole auf. ld
kann in zwei Modi ausgeführt werden, im statischen und im dynamischen
Modus, die über die Option -d gesteuert werden. Im statischen Modus
-dn werden die als Argumente angegebenen relokierbaren Objektdateien
zu einer ausführbaren Objektdatei gebunden. Wenn die Option -r angege-
ben ist, werden relokierbare Objektdateien zu einer relokierbaren
Objektdatei gebunden. Im dynamischen Modus -dy (der Voreinstellung)
werden die als Argumente angegebenen relokierbaren Objektdateien zu
einer ausführbaren Objektdatei gebunden, die während der Ausführung
mit allen als Argumente angegebenen, gemeinsam benutzten Objektdateien
gebinden wird. Wenn die Option -G angegeben ist, werden relokierbare
Objektdateien zu einem gemeinsam benutzten Objekt gebunden. In allen
Fällen wird die Ausgabe von ld standardmäßig in die Ausgabedatei a.out
geschrieben.
Bezeichnet das Argument eine Bibliothek, wird diese zu dem Zeitpunkt,
da sie in der Argumentenliste gefunden wird, genau ein Mal durchsucht.
Die Bibliothek kann entweder ein relokierbares Archiv oder ein gemein-
sam benutztes Objekt sein. Bei Archivbibliotheken werden nur solche
Routinen geladen, die einen nicht aufgelösten externen Verweis defi-
nieren. Die Symboltabelle der Archivbibliothek [siehe ar(4)] wird
nacheinander so oft durchsucht, wie zur Auflösung externer Verweise
mit Hilfe der Bibliothekselemente erforderlich ist. Demnach ist die
Anordnung der Elemente in der Bibliothek ohne Bedeutung, sofern nicht
mehrere Bibliothekselemente vorhanden sind, die dasselbe externe Sym-
bol definieren. Ein gemeinsam benutztes Objekt besteht aus einer ein-
zigen Einheit, bei dem alle Verweise entweder in der erstellten aus-
führbaren Datei oder in anderen gemeinsam benutzten Objekten, die mit
diesem Objekt gebunden werden, aufgelöst sein müssen.
OPTIONEN
-a Nur im statischen Modus:
Erstellt eine ausführbare Objektdatei und gibt Fehlernachrichten
zu undefinierten Verweisen aus. Dies ist das standardmäßige Ver-
halten im statischen Modus. -a darf nicht zusammen mit der Option
-r verwendet werden.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
ld(1) ld(1)
-b Nur im dynamischen Modus:
Beim Erstellen einer ausführbaren Datei wird keine spezielle Ver-
arbeitung für Relokationen vorgenommmen, die auf Symbole in
gemeinsam benutzten Objekten verweisen. Ohne die Option -b
erstellt der Binder (Link-Editor) spezielle positionsunabhängige
Relokationen für Verweise auf Funktionen, die in gemeinsam
benutzten Objekten definiert sind, und sorgt dafür, daß Datenob-
jekte, die in gemeinsam benutzten Objekten definiert sind, vom
dynamischen Binder während der Laufzeit in das Speicherabbild der
ausführbaren Datei kopiert werden. Mit der Option -b ist der
erzeugte Code zwar effizienter, kann aber nur in einem geringeren
Maße gemeinsam benutzt werden.
-d[y|n]
Bei -dy (Voreinstellung), verwendet ld den dynamischen Bindepro-
zeß. Wenn -dn angegeben ist, verwendet ld den statischen Binde-
prozeß.
-e epsym
Setzt die Einsprungadresse für die Ausgabedatei auf die Adresse,
die vom Symbol epsym vorgegeben ist.
-h name
Nur im dynamischen Modus:
Zeichnet beim Erstellen eines gemeinsam benutzten Objekts den
Namen (name) im dynamischen Abschnitt des Objekts auf. name wird
anstelle des Reliant UNIX-Dateinamens für das Objekt in ausführ-
baren Dateien aufgezeichnet, die an dieses Objekt gebunden sind.
Dementsprechend wird name auch vom dynamischen Binder als Name
des gemeinsam benutzten Objekts verwendet, nach dem während der
Laufzeit gesucht wird.
-lx Durchsucht eine Bibliothek libx.so oder libx.a. Hierbei handelt
es sich um konventionelle Namen von Bibliotheken für gemeinsam
benutzte Objekte bzw. Archivbibliotheken. Im dynamischen Modus
sucht ld in jedem im Bibliothekssuchpfad angegebenen Verzeichnis
nach einer Datei libx.so oder libx.a, sofern nicht die Option
-Bstatic aktiviert ist. Die Suche in den Verzeichnissen wird
beendet, sobald eine der beiden Dateien in einem Verzeichnis
gefunden wird. ld wählt die Datei aus, die auf .so endet, wenn lx
zwei Dateien enthält, deren Namen die Formate libx.so und libx.a
haben. Wird keine Datei libx.so gefunden, verwendet ld die Datei
libx.a. Im statische Modus, oder wenn die Option -Bstatic akti-
viert ist, wählt ld nur die Datei aus, die auf .a endet. Eine
Bibliothek wird durchsucht, sobald ld auf den Namen dieser Bibli-
othek trifft; dies bedeutet also, daß die Position von -l signi-
fikant ist.
-m Schreibt ein Speicherabbild oder eine Liste der Ein-/Ausgabeab-
schnitte auf die Standardausgabe.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
ld(1) ld(1)
-o outfile
Erstellt eine Ausgabeobjektdatei mit dem Namen outfile. Der Name
der Objektdatei lautet standardmäßig a.out.
-r Kombiniert mehrere relokierbare Objektdateien zu einer relokier-
baren Objektdatei. ld weist nicht auf nicht aufgelöste Verweise
hin. Diese Option kann im dynamischen Modus oder mit -a nicht
verwendet werden.
-s Entfernt Symboltabelleninformationen aus der Ausgabedatei. Die
Abschnitte mit Debugging-Informationen und mit den Zeilennummern
sowie die zugehörigen Einträge zur Relokation werden entfernt.
Außer bei relokierbaren Dateien und gemeinsam benutzten Objekten
werden auch die Abschnitte mit der Symboltabelle und der Zeichen-
kettentabelle aus der erzeugten Objektdatei entfernt.
-t Deaktiviert die Ausgabe einer Warnung in bezug auf mehrfach defi-
nierte Symbole, die unterschiedliche Größen aufweisen.
-u symname
Gibt symname als ein undefiniertes Symbol in die Symboltabelle
ein. Dies bietet sich beim Laden aus ausschließlich einer Archiv-
bibliothek an, da die Symboltabelle ursprünglich leer ist und ein
nicht aufgelöster Verweis erforderlich ist, damit die erste Rou-
tine geladen wird. Die Position dieser Option in der Kommando-
zeile ist signifikant; die Option muß vor der Bibliothek angege-
ben werden, die das Symbol definiert.
-z defs
Erzwingt die Ausgabe eines schwerwiegenden Fehlers, wenn nach dem
Binden noch undefinierte Symbole vorliegen. Dies ist die Vorein-
stellung, wenn eine ausführbare Datei erstellt wird. Sie bietet
sich auch beim Erstellen eines gemeinsam benutzten Objekts an, um
sicherzugehen, daß ein eigenständiges Objekt erstellt wird, in
dem alle symbolischen Verweise intern aufgelöst sind.
-z nodefs
Läßt undefinierte Symbole zu. Dies ist die Voreinstellung, wenn
ein gemeinsam benutztes Objekt erstellt wird. Sie kann auch beim
Erstellen einer ausführbaren Datei im dynamischen Modus verwendet
werden, wenn diese Datei mit einem gemeinsam benutzten Objekt
gebunden wird, das nicht aufgelöste Verweise in Routinen auf-
weist, die von der ausführbaren Datei nicht verwendet werden.
Diese Option sollte mit Vorsicht eingesetzt werden.
-z text
Nur im dynamischen Modus:
Erzwingt die Ausgabe eines schwerwiegenden Fehlers, wenn Reloka-
tionen gegen nicht beschreibbare, zuweisbare Abschnitten verblei-
ben.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
ld(1) ld(1)
-B[dynamic|static]
Steuert das Einbinden von Bibliotheken. -Bdynamic ist nur im
dynamischen Modus gültig. Diese Optionen können in der Kommando-
zeile beliebig oft als "Umschaltoptionen" angegeben werden: Wenn
die Option -Bstatic angegeben ist, wird bis zum nächsten
-Bdynamic kein gemeinsam benutztes Objekt mehr akzeptiert. Siehe
hierzu auch die Option -l.
Achtung: Wenn Sie bei den -B-Optionen -Bstatic als letzte ange-
ben, so wird auch die Standardbibliothek libc als statische
Bibliothek benutzt.
-Bcountmultigots=number
Legt in Kombination mit -Bmultigot die Anzahl der GOTs und GPs
fest, die der Binder erzeugen soll (Voreinstellung = 3). Wenn ein
Programm zuviele GOT-Einträge benötigt, dann kann man trotz meh-
rerer GOTs beim Binden die Fehlermeldung "not enough space for
multiple GOTs, use -Bcountmultigots=<number>" bekommen.
-Bdojmpopt
Weist den Binder an, während des Bindens leere "Delay Slots" mit
Sprung- (jump) und Sprung-und-Binde-Instruktionen (jump and link)
auszufüllen. Dies wirkt sich vor allem zusammen mit den Flags
-Kold oder -Kselpic aus. Diese Option kann allerdings auch Aus-
wirkungen auf das Debugging haben, da der Compiler möglicherweise
Code generiert, der die erste Instruktion einer Funktion über-
springt.
-Bkeepmdebug
Beläßt den Abschnitt .mdebug in der Ausgabedatei. Dieser
Abschnitt enthält symbolische Debugging-Informationen für dbx.
Standardmäßig wird der Abschnitt .mdebug aus der Ausgabedatei
entfernt.
-Blargedynsym
Schreibt beim Erstellen einer dynamischen ausführbaren Datei alle
globalen Symbole in die Tabelle dynamischer Symbole .dynsym. Nor-
malerweise schreibt ld nur die für das dynamische Binden benötig-
ten Symbole in den Abschnitt .dynsym; hierbei handelt es sich um
undefinierte Symbole und solche, auf die in gemeinsam benutzten
Bibliotheken (shared libraries) verwiesen wird. Diese Option muß
möglicherweise zum Laden von gemeinsam benutzten Bibliotheken mit
libdl angegeben werden. Mit Angabe dieser Option wird gewährlei-
stet, daß alle definierten globalen Symbole in a.out den gemeinsam
benutzten Bibliotheken zur Verfügung stehen, die über dlopen(3X)
geladen wurden.
-Bloadall
Hiermit lädt der Binder sämtliche Objektmodule aus einem Archiv.
Dies betrifft nur die Archive, die nach der Option in der Binde-
zeile angegeben sind, und zwar so lange, bis die Option durch
-Bloadsymbolic wieder aufgehoben wird.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
ld(1) ld(1)
-Bloadsymbolic
Stellt das Standardverhalten beim Laden von Modulen aus Archiven
wieder her, so daß die Module in aufgelöste undefinierte Symbole
geladen werden. Diese Option hebt die Auswirkungen von -Bloadall
auf. Sie betrifft nur die Archive, die nach der Option in der
Bindezeile angegeben sind.
-Bmultigot
Erzeuge mehrere Global Offset Tables (GOT). Alle Einträge in der
GOT müssen mit einem 16-Bit-Offset von einem gemeinsamen GP (Glo-
bal Pointer) aus erreichbar sein. Wenn die GOT zu groß wird, kann
man beim Binden die Fehlermeldung "gp relocation overflows 16
bits" bekommen. Mit dieser Option wird der Binder aufgefordert,
mehrere GOTs und GPs anzulegen, um diesen Fehler zu vermeiden.
Standardmäßig legt der Binder dann 3 Global Offset Tables an.
Die GP relevanten Relokierungen einer relokierbaren Objektdatei
müssen zusammen in eine GOT passen. Dies wird vom Compiler für
einfache relokierbare Objektdatei garantiert. Bei der Kombination
mehrerer relokierbarer Objektdateien zu einer neuen relokierbaren
Objektdatei durch ld -r kann diese Bedingung verletzt werden.
Beim Binden mit -Bmultigot erhält man dann für so eine relokier-
bare Objektdatei die Fehlermeldung "A modul requires <number> GOT
entries. The maximal number is 16384.".
-Bnocalltuning
Beim Erstellen einer ausführbaren Datei werden die Werte der glo-
balen Funktionssymbole nicht so angepaßt, daß sie die gp-Regi-
sterberechnung zu Anfang der Funktionen PIC überspringen. Diese
Option hat eine Verringerung der Leistung zur Folge.
-Bnolibraryreplacement
Weist den dynamischen Binder an, beim Erstellen einer ausführba-
ren Datei die Umgebungsvariable LDLIBRARYPATH immer zu ignorie-
ren.
-Bprintlibs
Zeigt die Pfadnamen aller Bibliotheken an, die ld tatsächlich zur
Erstellung der Ausgabedatei verwendet.
-Bptcbigpage
Legt die Ausgabedatei so an, daß sie mit dem Kommando preload
verarbeitet werden kann. Davon profitieren am meisten Anwendun-
gen, die sehr viel Speicher belegen (z. B. Datenbanken). Um diese
Option auszunützen, muß die Ausgabedatei vor der Ausführung vor-
weggeladen sein. Nähere Informationen finden Sie in preload(8).
-Brpath=pathname
pathname enthält eine Verzeichnisliste, die dazu verwendet wird,
um Bibliothekssuchverzeichnisse für den dynamischen Binder anzu-
geben.
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
ld(1) ld(1)
Diese Option hat dieselbe Bedeutung wie die Umgebungsvariable
LDRUNPATH (s. u.). Ist LDRUNPATH gleichzeitig gesetzt, dann
wird die Umgebungsvariable ignoriert.
-Bsymbolic
Nur im dynamischen Modus:
Bindet beim Erstellen eines gemeinsam benutzten Objekts die Ver-
weise auf globale Symbole an die entsprechenden Definitionen
innerhalb des Objekts, wenn diese Definitionen verfügbar sind.
Normalerweise werden Verweise auf globale Symbole innerhalb von
gemeinsam benutzten Objekten nicht vor der Ausführung gebunden,
auch dann nicht, wenn die Definitionen verfügbar sind. Dies
bedeutet, daß Definitionen desselben Symbols in einer ausführba-
ren Datei oder in anderen gemeinsam benutzten Objekten die
objekteigenen Definitionen überchreiben können. ld gibt Warnungen
bei undefinierten Symbolen aus, sofern dies nicht durch -z defs
deaktiviert ist.
-BGnum:num
Steuert die Zuordnung der Symbole SHNCOMMON zum Abschnitt .sbss.
ld ordnet dem Abschnitt .sbss die SHNCOMMON-Symbole zu, deren
Größe kleiner-gleich num ist. Alle anderen SHNCOMMON-Symbole
werden im Abschnitt .bss zugeordnet. num nimmt standardmäßig den
Wert 8 an. Auf der gesamten Seite des Symbols : darf kein Leer-
zeichen stehen.
-BACOMMONsize:size
Legt im dynamischen Modus fest, welche SHNCOMMON-Symbole im
Abschnitt .bss oder .sbss zugeordnet werden. ld ordnet in den
Abschnitten .sbss oder .bss alle SHNCOMMON-Symbole zu, deren
Größe kleiner-gleich size ist. Alle verbleibenden SHNCOMMON-
Symbole werden während der Laufzeit vom dynamischen Binder
zugeordnet. Standardmäßig ist size praktisch unendlich. Auf der
Seite des Symbols : darf an keiner Stelle ein Leerzeichen stehen.
-B64s
Gibt an, daß ein 64-Bit-Objekt erstellt werden soll. Standardmä-
ßig werden 32-Bit-Objekte erstellt. Eine Kombination aus 32-Bit-
und 64-Bit-Objekten ist nicht zulässig. Wenn diese Option nicht
gesetzt und die erste o-Datei in der Kommandozeile von ld eine
64-Bit-Objektdatei ist, wechselt ld in den 64-Bit-Modus.
-G Nur im dynamischen Modus:
Erstellt ein gemeinsam benutztes Objekt. Undefinierte Symbole
sind zulässig.
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
ld(1) ld(1)
-I name
Verwendet beim Erstellen einer ausführbaren Datei name als den
Pfadnamen für den Interpreter, der in den Programmvorspann
geschrieben werden soll. Im statischen Modus wird standardmäßig
kein Interpreter angegeben; im dynamischen Modus wird der Name
des dynamischen Binders, /usr/lib/libc.so.1, als Voreinstellung
verwendet. In beiden Fällen kann die Voreinstellung mit -I über-
schrieben werden. exec lädt den Interpreter wenn a.out geladen
wird und gibt die Steuerung dann an den Interpreter anstatt
direkt an a.out weiter.
-L path
Fügt path in die Suchverzeichnisse für Bibliotheken ein. ld sucht
zuerst in jedem über die Option -L angegebenen Verzeichnis und
dann in den Standardverzeichnissen nach Bibliotheken. Diese
Option ist nur dann wirksam, wenn sie vor der Option -l in der
Kommandozeile angegeben wird.
-M mapfile
Nur im statischen Modus:
Liest mapfile als eine Textdatei mit Anweisungen für ld. Da diese
Anweisungen die Form der durch ld erstellten Ausgabedatei ändern,
wird die Angabe dieser Option nicht empfohlen.
-Q[y|n]
Unter -Qy wird eine Zeichenkette ident in den Abschnitt .comment
der Ausgabedatei eingefügt, die die Version des zur Erstellung
der Datei verwendeten Binders angibt. Hierbei entstehen mehrere
ld idents, wenn der Bindeprozeß in mehreren Schritten durchge-
führt wurde, wie beispielsweise bei der Verwendung von ld -r.
Dies entspricht der standardmäßigen Ausführung des Kommandos cc.
Mit -Qn wird die Ausgabe der Version unterdrückt.
-V Gibt eine Nachricht mit Informationen zur Version des verwendeten
Kommandos ld aus.
-YP dirlist
Ändert die für die Bibliothekssuche verwendeten Standardverzeich-
nisse. dirlist ist eine Liste von durch Kommata getrennten Pfad-
namen.
Die Umgebungsvariable LDLIBRARYPATH kann zur Angabe von Suchpfaden
für Bibliotheken verwendet werden. Ganz allgemein enthält diese zwei
durch Semikolons voneinander getrennte Verzeichnislisten:
dirlist1;dirlist2
Wenn ld mit einer beliebigen Anzahl von -L-Optionen aufgerufen wird,
wie beispielsweise in
ld ... -Lpath1 ...-Lpathn ...
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
ld(1) ld(1)
lautet die Reihenfolge der Suchpfade wie folgt:
dirlist1 path1 ... pathn dirlist2 LIBPATH
Beachten Sie hierbei, daß LDLIBRARYPATH auch vom dynamischen Binder
verwendet wird. Wenn LDLIBRARYPATH in der Umgebung gesetzt ist,
durchsucht der dynamische Binder die dort aufgelisteten Verzeichnisse
nach gemeinsam benutzten Objekten, die während der Ausführung an das
Programm gebunden werden.
Wird ein 64-Bit-Objekt erstellt, dann wird anstelle von
LDLIBRARYPATH LDLIBRARY64sPATH ausgewertet, wenn dieses in der
Umgebung gesetzt ist. Ist LDLIBRARY64sPATH nicht gesetzt, dann wird
LDLIBRARYPATH verwendet.
Auch die Umgebungsvariable LDRUNPATH, die eine Verzeichnisliste ent-
hält, kann zur Angabe von Bibliothekssuchverzeichnissen für den dyna-
mischen Binder verwendet werden. Wenn diese Umgebungsvariable vorliegt
und nicht Null ist, wird sie von ld über Daten, die in der erzeugten
Objektdatei gespeichert sind, an den dynamischen Binder weitergegeben.
HINWEISE
Globale Variablen, die in unterschiedlichen Objekten durch denselben
Namen deklariert sind (auch ohne den Zusatz "extern") werden als eine
Variable zusammengefaßt. In diesem Fall gibt ld eine Warnung aus, die
unbedingt beachtet werden muß:
ld: file.o: warning: size of symbol `Progname` from file
/usr/lib/libnsl.so overridden with size of tentative definition
Die Warnung in diesem Beispiel besagt, daß eine logische Variable
"Progname", die in der Datei "file.c" deklariert wurde, bereits in der
Bibliothek "libnsl.so" enthalten ist. Während der Ausführung haben
beide dieselbe Speicheradresse.
Ist dies nicht beabsichtigt, muß die oben angezeigte Warnung beachtet
und die entsprechende Variable umbenannt werden.
DATEIEN
libx.so Bibliotheken für gemeinsam benutzte Objekte
libx.a Archivbibliotheken
a.out Ausgabedatei
LIBPATH üblicherweise /usr/ccs/lib:/usr/lib
SIEHE AUCH
cc(1), exec(2), exit(2), end(3C), a.out(4), ar(4), preload(8).
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98