Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Binder-Optionen

&pagelevel(4)&pagelevel

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 /
short_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:

  1. nur beim CC-Kommando

    -l Cxx im C++ 2017- und C++ 2020-Modus
    -l Cstd im C++ V3-Modus
    -l C im Cfront-C++-Modus

  2. immer

    -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:

  1. die mit -L angegebenen Dateiverzeichnisse

  2. entweder 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

c




SYSLNK.CRTE.PARTIAL-BIND

Verbindungsmodul zum dynamischen Nachladen des C-Laufzeitsystems (Standardfall)

SYSLNK.CRTE

Einzelmodule zum kompletten Einbinden des C-Laufzeitsystems (bei -d n )

m

siehe c


C

siehe c


SYSLNK.CRTE.CFCPP

Cfront-C++-Laufzeitsystem

SYSLNK.CRTE.CPP

Cfront-C++-Bibliothek für Ein-/Ausgabe und komplexe Mathematik

Cstd

siehe c


SYSLNK.CRTE.RTSCPP

C++ V3-Laufzeitsystem

SYSLNK.CRTE.STDCPP

C++ V3-Standard-Bibliothek

Cxx


siehe c


siehe Cxx1 oder Cxx2

C++ 2017 oder C++ 2020 Bibliothek, je nach Option -K library_version

Cxx1

siehe c


SYSLNK.CRTE.CXX01

C++ 2017 Bibliothek in der Bibliotheks-Version 1

Cxx2

siehe c


SYSLNK.CRTE.CXX02

C++ 2017 oder C++ 2020 Bibliothek in der Bibliotheks-Version 2

RWtools

SYSLNK.CRTE.TOOLS

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).

BLSLIB00=‘$RZ99.SYSLNK.CCC.999‘
BLSLIB01=‘$MYTEST.LIB‘
export BLSLIB00 BLSLIB01
c89 mytest.o -l BLSLIB


-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 ccc11 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.