Alias-Name:
LINK
Mit dieser Anweisung wird ein Bindelauf gestartet. Im Falle von C++ V3, C++ 2017 und C++ 2020-Objekten wird außerdem der Prälinker zur automatischen Template-Instanziierung aktiviert. Die Eingabequellen und andere Bedingungen für den Prälinker- und Bindelauf werden in vorangehenden MODIFY-BIND-PROPERTIES-Anweisungen festgelegt.
BIND | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ACTION = list-poss: *PRELINK / *MODULE-GENERATION
Die Angabe *PRELINK ist nur in den Modi C++ V3, C++ 2017 und C++ 2020 relevant und betrifft die automatische Template-Instanziierung durch den Prälinker.
Wenn die ACTION-Option nicht angegeben wird, gilt folgende Voreinstellung:
ACTION = (*PRELINK,*MODULE-GENERATION)
In den Modi C++ V3, C++ 2017 und C++ 2020 wird dann sowohl ein Prälinker- als auch ein Bindelauf durchgeführt. Das Ergebnis sind Einzelmodule, in denen alle Templates instanziiert sind und ein gebundenes Modul. In den C-Modi und im Cfront-C++-Modus wird die Angabe *PRELINK ignoriert und es wird nur ein Bindelauf durchgeführt.
Bei Angabe von ACTION=*PRELINK wird nur ein Prälinker-Lauf durchgeführt. Das Ergebnis sind Einzelmodule, in denen alle Templates instanziiert sind. Eventuelle Angaben in den OUTPUT- und OUTPUT-FORMAT-Optionen werden ignoriert.
Bei Angabe von ACTION=*MODULE-GENERATION wird nur ein Bindelauf durchgeführt.
OUTPUT = *NONE / *LIBRARY-ELEMENT(...)
Mit dieser Option wird angegeben, in welcher PLAM-Bibliothek (LIBRARY=) und unter welchem Elementnamen (ELEMENT=) das gebundene Modul abgelegt werden soll. Diese Angaben werden in einer SAVE-LLM-Anweisung (als MODULE-CONTAINER-Operand) an den BINDER weitergereicht. Wenn mit der Option ADD-OPTION keine anderen Angaben gemacht werden, gelten für die restlichen Operanden der SAVE-LLM-Anweisung die entsprechenden Standardeinstellungen des BINDER.
Die Angabe *NONE
ist Standard und ist nur beim Prälinken sinnvoll, dh. es wird kein Binde-Objekt erzeugt (siehe oben, ACTION = ).
LIBRARY =<filename 1..54>
Das Modul wird in die PLAM-Bibliothek mit dem angegebenen Namen geschrieben.
LIBRARY = *LINK(...)
LINK-NAME = <filename 1..8>
Mit <filename> kann (statt eines katalogisierten Bibliotheksnamens) auch ein Linkname angegeben werden. Der Linkname muss vor Aufruf des Compilers mit dem ADD-FILE-LINK-Kommando der PLAM-Bibliothek zugeordnet worden sein.
ELEMENT = <composed-name 1..64 with-under>(...)
Das Modul wird unter dem angegebenen Namen in die mit LIBRARY= angegebene PLAM-Bibliothek geschrieben.
VERSION = *UPPER-LIMIT
Der Compiler verwendet die höchstmögliche Version.
VERSION = *INCREMENT
Das Element erhält die gegenüber der höchsten vorhandenen Version um 1 inkrementierte Versionsnummer, vorausgesetzt, die höchste vorhandene Versionsbezeichnung endet mit einer inkrementierbaren Ziffer. Ist die Versionsbezeichnung nicht inkrementierbar, wird der Bindelauf mit Fehler abgebrochen.
Beispiel siehe COMPILE-Anweisung ("COMPILE").
VERSION = <composed-name 1..24 with-under>
Das Element erhält die angegebene Versionsbezeichnung.
OUTPUT-FORMAT = *LLM(EXTERNAL-NAMES = *UNCHANGED / *STD / *SHORT)
Diese Option steuert die Behandlung von Symbolnamen im EEN-Format (EEN = Extended External Name) durch den BINDER. Beim BINDER ist diese Steuerung durch den FOR-BS2000-VERSION-Operand der SAVE-LLM-Anweisung realisiert. Je nach dem Wert dieser Option wird ein passender Operanden-Wert an den BINDER übergeben.
EEN-Namen, d.h. ungekürzte externe C++-Symbole, sind generell in Modulen enthalten, die mit dem Compiler im C++ V3, C++ 2017 oder C++ 2020-Modus erzeugt werden.
Ungekürzte externe C-Symbole werden nur dann generiert, wenn bei der Übersetzung folgende Option angegeben wird: MODIFY-MODULE-PROPERTIES C-NAMES=*UNLIMITED (siehe "MODIFY-MODULE-PROPERTIES").
In diesem Fall werden auch längere externe C-Symbole vom Compiler nicht auf 32 Zeichen verkürzt.
Module mit EEN-Namen werden vom Compiler im LLM-Format 4 abgelegt. Die Module der im C++ V3, C++ 2017 und C++ 2020 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.
EXTERNAL-NAMES = *UNCHANGED
Es gilt die Angabe der letzten BIND-Anweisung.
EXTERNAL-NAMES = *STD
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 oder DBL weiterverarbeitet werden.
EXTERNAL-NAMES = *SHORT
Diese Angabe wird benötigt, wenn der BINDER das LLM-Format 1 generieren soll.
Zusammenfassung der generierten LLM-Formate
Eingabeformat | SDF-Option EXTERNAL-NAMES = | Ausgabeformat |
LLM 1 | Keine Angabe / *STD / *SHORT | LLM 1 |
LLM 4 (EEN) | Keine Angabe / *STD | LLM 4 |
*SHORT | LLM 1 |
ADD-OPTION = *UNCHANGED / *NONE / <c-string 1..1800 with-low>
Mit <c-string> können zusätzlich zum MODULE-CONTAINER-Operanden (siehe OUTPUT-Option) und zum FOR-BS2000-VERSION-Operanden (siehe OUTPUT-FORMAT-Option) weitere Operanden der BINDER-Anweisung SAVE-LLM angegeben werden. Mehrere Operanden müssen durch Kommas getrennt werden:’
operand1,
operand2,
...’
Die Operanden werden ohne SDF-Analyse direkt an den BINDER durchgereicht. Die folgenden Operanden der BINDER-Anweisung SAVE-LLM werden der MODIFY-BIND-PROPERTIES-Anweisung entnommen und dürfen deshalb nicht mit ADD-OPTION angegeben werden: TEST-SUPPORT (Abspeichern der LSD-Informationen) und MAP (Ausgeben einer Binderliste).
Automatische Template-Instanziierung
Die mit ADD-OPTION angegebenen Operanden werden derzeit nicht bei der automatischen Template-Instanziierung durch den Prälinker, sondern nur beim nachfolgenden Binden durch den BINDER berücksichtigt. Die Operanden sollten nicht die Art, Anzahl oder Reihenfolge der einzubindenden Module beeinflussen, da unterschiedliche Voraussetzungen beim Prälinker- und Bindelauf ggf. zu Duplikaten oder unbefriedigten Externverweisen führen können.
Beispiel
//BIND OUTPUT=*LIB(LIB=PLAM.BSP,ELEM=HALLO),ADD-OPT=’OVERWRITE=*NO,
NAME-COLLISION=*WARNING’