Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ld(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

exec(2)

exit(2)

end(3C)

a.out(4)

ar(4)

preload(8)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026