Folgende Optionen an den Binder werden nicht ausgewertet, wenn gleichzeitig eine der Optionen -c
, -E
, -M
oder -P
(Beendigung des Compilerlaufs nach der Übersetzung bzw. nach dem Präprozessorlauf, siehe "Optionen zur Auswahl von Übersetzungsphasen") angegeben wird.
-B extended_external_names
-B short_external_names
Diese Option wird benötigt, wenn das zu bindende Programm auf sehr alten Anlagen ablaufen soll. Auf Anlagen mit BS2000/OSD Version 1 bis 3 oder dem Produkt BLSSERV mit Version kleiner als 2.0 können keine LLMs mit langen Namen (EEN) verarbeitet werden. Für solche Anlagen muss das generierte Element ein LLM-Format 1 haben.
EEN-Namen, d.h. ungekürzte externe C++-Symbole, sind generell in Modulen enthalten, die mit dem Compiler im C++ 2017, C++ 2020 bzw. C++ V3-Modus erzeugt werden.
Ungekürzte externe C-Symbole werden nur dann generiert, wenn bei der Übersetzung die Option -K c_names_unlimited
angegeben wird (siehe "Optionen zur Objektgenerierung").
In diesem Fall werden auch externe C-Symbole vom Compiler nicht auf 32 Bytes verkürzt.
Module mit EEN-Namen werden vom Compiler im LLM-Format 4 abgelegt. Die Module der im C++ 2017, C++ 2020 bzw. C++ V3-Modus verwendeten C++-Bibliotheken und -Laufzeitsysteme des CRTE liegen ebenfalls im LLM-Format 4 vor.
Wenn die vom Compiler erzeugten Module keine EEN-Namen enthalten, d.h. im LLM-Format 1 vorliegen, spielt diese Option keine Rolle, da der Binder in diesem Fall generell das dem Eingabeformat entsprechende LLM-Format 1 erzeugt.
Standardmäßig generiert der BINDER das LLM-Format 4. Die EEN-Namen bleiben im Ergebnismodul ungekürzt erhalten. LLMs im Format 4 können unvollständig, d.h. mit offenen Externbezügen auf EEN-Namen gebunden und beliebig mit dem Binder weiterverarbeitet werden.
-B extended_external_names
Diese Angabe wird nur aus Kompatibilitätsgründen unterstützt.
-B short_external_names
Diese Angabe wird benötigt, wenn der Binder das LLM-Format 1 generieren soll.
In diesem Fall müssen alle Symbole mit langen Namen (EEN) befriedigt werden. Es bleibt kein EEN im generierten LLM bestehen. Bleibt hier eine offene Referenz, so bleibt sie auf Dauer offen und kann nicht nachträglich befriedigt werden.
Zusammenfassung der generierten LLM-Formate
Eingabeformat | Option -B | Ausgabeformat |
LLM 1 | Keine Angabe / extended_external_names / | LLM 1 |
LLM 4 (EEN) | Keine Angabe / extended_external_names | LLM 4 |
short_external_names | LLM 1 |
-d y
-d n
-d compl
Diese Option hat Auswirkungen auf das Einbinden des C-Laufzeitsystems.
Standardmäßig, d. h. ohne Angabe der Option oder bei Angabe von -d y, wird für die C-Standardbibliothek libc.a ein RESOLVE auf die Bibliothek SYSLNK.CRTE.PARTIAL-BIND abgesetzt. Anstelle des kompletten C-Laufzeitsystems wird nur ein Verbindungsmodul eingebunden, das alle offenen Externverweise auf das C-Laufzeitsystem befriedigt. Das C-Laufzeitsystem selbst wird zum Ablaufzeitpunkt dynamisch nachgeladen, und zwar entweder aus dem Klasse-4-Speicher, falls das C-Laufzeitsystem vorgeladen ist, oder aus der Bibliothek SYSLNK.CRTE.
Bei Angabe von -d n
wird das C-Laufzeitsystem komplett aus der Bibliothek SYSLNK.CRTE eingebunden.
Mit -d compl
wird die „Complete-Partial-Bind“-Technik des CRTE unterstützt. Dazu wird die Bibliothek SYSLNK.CRTE.COMPL eingebunden.
Eine ausführliche Beschreibung der „Complete-Partial-Bind“-Technik finden Sie im Handbuch „CRTE“ [5].
Im C++ V3-Modus wird anstelle der Standardbibliotheken SYSLNK.CRTE.RTSCPP und SYSLNK.CRTE.STDCPP die spezielle Bibliothek SYSLNK.CRTE.CPP-COMPL eingebunden. Diese Bibliothek wird ebenfalls anstelle von SYSLNK.CRTE.TOOLS verwendet.
Hinweis
Im CFRONT-C++-Modus wird die „Complete-Partial-Bind“-Technik nicht unterstützt. Die Option -d compl
wird in diesem Fall auf -dy
zurückgesetzt.
Im C++ 2017- und C++ 2020-Modus wird die „Complete-Partial-Bind“-Technik nicht unterstützt. Die Option -d compl
wird in diesem Fall mit einem Fehler abgewiesen.
-K
arg1[,arg2...]
Allgemeine Eingaberegeln zur -K
-Option finden Sie im Abschnitt "Aufruf-Syntax und allgemeine Regeln".
Als Argumente arg zur Steuerung des Binders sind folgende Angaben möglich:
link_stdlibs
no_link_stdlibs
-K link_stdlibs
ist voreingestellt und bewirkt, dass bestimmte Standardbibliotheken automatisch eingebunden werden (siehe auch Option -l
). Das heißt, für diese Bibliotheken werden intern die entsprechenden -l
-Optionen automatisch abgesetzt:
nur beim
CC
-Kommando-l Cxx
im C++ 2017- und C++ 2020-Modus-l Cstd
im C++ V3-Modus-l C
im Cfront-C++-Modusimmer
-l c
Bei Angabe von -K no_link_stdlibs
werden die o.g. Bibliotheken nicht automatisch eingebunden. -K no_link_stdlibs
wird automatisch gesetzt, wenn mit der Option -r
eine vorgebundene Objektdatei erzeugt wird.
-l
x
Diese Option veranlasst den Binder, beim Auflösen von Externverweisen per Autolink die Bibliothek mit dem Namen lib
x.a
zu durchsuchen. Standardmäßig durchsucht der Binder folgende Dateiverzeichnisse in der angegeben Reihenfolge nach der Bibliothek:
die mit
-L
angegebenen Dateiverzeichnisseentweder die mit der Option
-Y P
angegebenen Dateiverzeichnisse oder das Standard-Dateiverzeichnis/usr/lib
.
-l
x zählt zur Kategorie der Operanden und kann auch nach Beendigung der Optioneneingabe mit --
angegeben werden (siehe auch „Operanden“ (Aufruf-Syntax und allgemeine Regeln)).
Die Standardbibliotheken des C- und C++-Laufzeitsystems sind nicht im Dateiverzeichnis /usr/lib
des POSIX-Dateisystems installiert, sondern als PLAM-Bibliotheken im BS2000.
Zuordnung der Standardkürzel x zu den BS2000-PLAM-Bibliotheken:
x | Bibliotheksname | Inhalt |
|
| Verbindungsmodul zum dynamischen Nachladen des C-Laufzeitsystems (Standardfall) |
| Einzelmodule zum kompletten Einbinden des C-Laufzeitsystems (bei | |
| siehe | |
| siehe | |
| Cfront-C++-Laufzeitsystem | |
| Cfront-C++-Bibliothek für Ein-/Ausgabe und komplexe Mathematik | |
| siehe | |
| C++ V3-Laufzeitsystem | |
| C++ V3-Standard-Bibliothek | |
| siehe | |
siehe Cxx1 oder Cxx2 | C++ 2017 oder C++ 2020 Bibliothek, je nach Option | |
| siehe | |
| C++ 2017 Bibliothek in der Bibliotheks-Version 1 | |
| siehe | |
| C++ 2017 oder C++ 2020 Bibliothek in der Bibliotheks-Version 2 | |
|
| C++-V3-Bibliothek Tools.h++ |
Der Binder befriedigt die offenen Externverweise aus diesen PLAM-Bibliotheken nur, wenn die Option -l
x verwendet wird, nicht bei Angabe des expliziten Pfadnamens (z.B. /usr/lib/libRWtools.a
) mithilfe des Operanden datei.suffix (siehe "Aufruf-Syntax und allgemeine Regeln")!
Beim Aufruf des Compilers in den C-Sprachmodi wird als letzte -l
-Option implizit -l c
hinzugefügt, beim Aufruf im Cfront-C++-Modus -l C
, beim Aufruf im C++ V3-Modus -l Cstd
und beim Aufruf im C++ 2017 oder C++ 2020 Modus -l Cxx
(gilt nicht bei -K no_link_stdlibs
).
Die Reihenfolge und die Position, in der die -l
-Optionen und ggf. Objektdateien (bzw. Quelldateien, aus denen der Compiler Objektdateien generiert) in der Kommandozeile angegeben werden, sind für den Bindevorgang signifikant.
Beispielsweise würde mit dem Kommando CC -X v3-compatible test.c -l RWtools
das Programm ordnungsgemäß gebunden, das Kommando CC -X v3-compatible -l RWtools test.c
jedoch zu einem Fehler führen.
-l BLSLIB
Diese Option veranlasst den Binder, PLAM-Bibliotheken zu durchsuchen, die mit den Shell-Umgebungsvariablen BLSLIBnn (00 <= nn <= 99) zugewiesen wurden.
Die Umgebungsvariablen müssen vor Aufruf des Compilers mit den Bibliotheksnamen versorgt und mit dem POSIX-Kommando export
exportiert werden. Die Bibliotheken werden in aufsteigender Reihenfolge nn durchsucht.
Alle mit BLSLIBxx angegebenen Bibliotheken werden zyklisch durchsucht. Der BINDER behandelt die Bibliotheken so, als ob sie in einer RESOLVE-Anweisung als Liste angegeben worden wären.
-l BLSLIB
zählt zur Kategorie der Operanden und kann auch nach Beendigung der Optioneneingabe mit --
angegeben werden (siehe auch „Operanden“ (Aufruf-Syntax und allgemeine Regeln)).
Beispiel
Die mit BLSLIB00 zugewiesene Bibliothek enthält offene Externverweise auf die mit BLSLIB01 zugewiesene Bibliothek, diese wiederum enthält offene Externverweise auf die BLSLIB00-Bibliothek (sog. Rückbezüge).
|
-L dvz
Mit dvz wird ein zusätzliches Dateiverzeichnis angegeben, in dem der Binder nach den mit -l
-Optionen angegebenen Bibliotheken suchen soll. Standardmäßig wird nur das Dateiverzeichnis /usr/lib
nach den Bibliotheken durchsucht. Ein mit -L
angegebenes Dateiverzeichnis wird vor dem Standard-Dateiverzeichnis /usr/lib
bzw. vor den mit der Option -Y P
angegebenen Verzeichnissen durchsucht. Die Reihenfolge, in der die -L
-Optionen in der Kommandozeile angegeben werden, bestimmt die Suchreihenfolge des Binders.
Diese Option zählt nur bei den Kommandos cc
, c11
und CC
zur Kategorie der Operanden und kann deshalb nur bei diesen Kommandos auch nach Beendigung der Optioneneingabe mit --
angegeben werden (siehe auch „Operanden“ (Aufruf-Syntax und allgemeine Regeln)).
-r
Mit dieser Option können mehrere Objektdateien zu einer einzigen Objektdatei vorgebunden werden. Eine vorgebundene Objektdatei ist nicht ausführbar und enthält Relocation-Informationen, die für einen erneuten Bindelauf benötigt werden.
Beim Vorbinden mit -r sind implizit die folgenden Optionen gesetzt:
-K no_link_stdlibs und -B extended_external_names. Das heißt, die C/C++-Standardbibliotheken werden nicht eingebunden und im Falle von langen C- und C++-Namen (EENs) wird das LLM-Format 4 generiert. Die ggf. angegebenen Optionen -K link_stdlibs
und -B short_external_names werden ignoriert. Beim Erzeugen einer vorgebundenen Objektdatei erfolgen keine Instanziierungen durch den Prälinker.
Unaufgelöste Referenzen führen zu keiner Fehlermeldung.
Die vorgebundene Objektdatei erhält den Namen a.out bzw. den mit der -o-Option angegebenen Namen. Die Objektdatei kann nur sinnvoll weiterverarbeitet (gebunden) werden, wenn der Name der vorgebundenen Objektdatei das Suffix .o oder ein mit der Option -Y F vereinbartes Suffix (siehe "Allgemeine Optionen") enthält.
-s
Aus der Ausgabedatei werden Symboltabellen-Informationen entfernt. Die Abschnitte mit den Zusatzinformationen zur Fehlersuche und mit den Zeilennummern sowie die dazugehörenden Relokations-Informationen werden entfernt.
Die Option wird ignoriert, wenn gleichzeitig Testhilfe-Informationen für AID angefordert werden (Optionen -g
). Außerdem wird sie in allen C++-Modi ignoriert, da die Symboltabellen zur Ablaufzeit für globale Intitialisierungen benötigt werden. Die Option entspricht der BINDER-Anweisung SAVE-LLM SYMBOL-DICTIONARY=*NO.
-Y P,
dvz1[:
dvz2...]
Der Binder sucht zuletzt in den mit dvz angegebenen Verzeichnissen nach Bibliotheken. Ohne Angabe dieser Option wird das Standard-Dateiverzeichnisse /usr/lib
zuletzt durchsucht.
-z nodefs
Diese Option wird nur beim Binden von C-Programmen (cc, c11, c89) unterstützt. Bei Angabe dieser Option kann ein C-Programm gebunden werden, in dem alle Externverweise auf die C-Standardbibliothek libc.a offen bleiben, d.h. es wird kein RESOLVE auf die Bibliotheken SYSLNK.CRTE.PARTIAL-BIND oder SYSLNK.CRTE abgesetzt. Die offenen Externverweise werden zum Ablaufzeitpunkt dynamisch aus dem in den Klasse-4-Speicher vorgeladenen C-Laufzeitsystem befriedigt.
Bei Verwendung dieser Option werden auch „unresolved externals“ auf Benutzermodule ignoriert und nicht gemeldet. Erst beim Laden des Programms erhält man Hinweise auf unbefriedigte Externverweise.
–z dup_ignore
–z dup_warning
–z dup_error
Diese Optionen steuern das Verhalten von doppelten Entry-Namen während des Bindevorgangs.
–z dup_ignore
Doppelte Entry-Namen werden während des Bindevorgangs ignoriert. Dies ist der Standardwert.
–z dup_warning
Doppelte Entry-Namen führen während des Bindevorgangs zu einer Warnung.
–z dup_error
Doppelte Entry-Namen führen während des Bindevorgangs zu einem Error.
Ein Programm, das doppelte Entry-Namen (duplicates) enthält, kann im POSIX nicht ausgeführt werden. Es beendet sich sofort mit dem Return-Code 127.
Der Compiler kann eventuell gefundene Duplikate nicht namentlich nennen. Wenn das Programm in BS2000-Umgebung (SDF) mit /LOAD-EXECUTABLE-PROGRAM
geladen wird, werden Duplikate mit der Meldung BLS0339 angezeigt.
In welchen Modulen die doppelten Entrys enthalten sind, kann mit Hilfe der Binderliste (siehe -N binder, "Optionen zur Ausgabe von Listen und CIF-Informationen") und ggf. des Hilfsprogramms nm
herausgefunden werden.