Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Beispiel 2: Übersetzen, Binden und Starten eines C++-Programms

&pagelevel(4)&pagelevel

Das C++-Quellprogramm besteht aus zwei PLAM-Bibliothekselementen PROG1 und PROG2. Vom Compiler werden LLMs erzeugt und in die PLAM-Bibliothek SYS.PROG.LIB geschrieben. Die Module werden anschließend mit der BIND-Anweisung des Compilers gebunden.

Quellprogramm-Element PROG1

#include <iostream.h>
extern void ruf(void);
int main(void)
{
   cout << "main(prog1)" << '\n';
   ruf();
   return 0;
}

Quellprogramm-Element PROG2

#include <iostream.h>
void ruf(void)
{
   cout << "ruf(prog2)" << '\n';
}

Die oben gezeigten Quellprogrammteile wurden mit dem EDT erstellt und jeweils mit einer WRITE-Anweisung in die PLAM-Bibliothek PLAM.BSP abgespeichert:
WRITE L=PLAM.BSP(E=elemname).

Ablaufprotokoll zum Übersetzen, Binden und Starten

(IN)   bedeutet Benutzereingaben
(OUT)  bedeutet System/Programm-Meldungen
(IN)   /START-CPLUS-COMPILER ——————————————————————————————————————————  (1) 
(OUT)  %  BLS0523 ELEMENT ’SDFCC’, VERSION ’04.0B02’, TYPE ’L’ FROM LIBRARY
         ’:P401:$TSOS.SYSLNK.CPP.040’ IN PROCESS
(OUT)  %  BLS0524 LLM ’SDFCC’, VERSION ’04.0B02’ OF ’2023-04-02 13:40:11’ 
          LOADED
(OUT)  %  BLS0551 COPYRIGHT (C) 2023 Fujitsu Technology Solutions GmbH. ALL
          RIGHTS RESERVED
(OUT)  %  CDR9992 : BEGIN C/C++ VERSION 04.0B02
(IN)   //MOD-SOURCE-PROP LANGUAGE=*CPLUS(V3-COMPATIBLE) ———————————————  (2)
(IN)   //MOD-BIND-PROP RUNTIME-LANGUAGE=*CPLUS(*V3-COMPATIBLE) ————————  (2)
(IN)   //COMPILE SOURCE=(*LIB(LIB=PLAM.BSP,ELEM=PROG1),-
       //*LIB(LIB=PLAM.BSP,ELEM=PROG2)) ———————————————————————————————  (3) 
(OUT)  %  CDR9907 : NOTES: 0  WARNINGS: 0  ERRORS: 0  FATALS: 0
(OUT)  %  CDR9937 : MODULES GENERATED, CPU TIME USED = 0.0030 SEC
(OUT)  %  CDR9907 : NOTES: 0  WARNINGS: 0  ERRORS: 0  FATALS: 0
(OUT)  %  CDR9937 : MODULES GENERATED, CPU TIME USED = 0.0020 SEC
(IN)   //MOD-BIND-PROP INCLUDE=(*LIB(LIB=SYS.PROG.LIB,ELEM=PROG1),-
       //*LIB(LIB=SYS.PROG.LIB,ELEM=PROG2)) ———————————————————————————  (4) 
(IN)   //BIND OUTPUT=*LIB(LIB=PLAM.BSP1,ELEM=PROG) ————————————————————  (5) 
(OUT)  %  BND1501 LLM FORMAT: ’4’
(OUT)  %  BND3102 SOME WEAK EXTERNS UNRESOLVED
(OUT)  %  BND1101 BINDER NORMALLY TERMINATED. SEVERITY CLASS: 
          'UNRESOLVED EXTERNAL'
(IN)   //END ——————————————————————————————————————————————————————————  (6) 
(OUT)  %  CDR9936 END; SUMMARY: NOTES: 0  WARNINGS: 0  ERRORS: 0  FATALS: 0
(OUT)  %  CCM0998 CPU TIME USED: 1.9967 SECONDS
(IN)   /START-EXECUTABLE-PROG *L(LIB=PLAM.BSP1,E-O-S=PROG) ————————————  (7) 
(OUT)  %  BLS0523 ELEMENT 'PROG', VERSION '@', TYPE 'L' FROM LIBRARY
          ':2OS2:$USERIDXY.PLAM.BSP1' IN PROCESS
(OUT)  %  BLS0524 LLM '$LIB-ELEM$PLAM$BSP1$$PROG$$$UPPE', VERSION ' '
          OF '2020-04-02 14:22:01' LOADED
(OUT)  main(prog1)
(OUT)  ruf(prog2)
(OUT)  %  CCM0998 CPU TIME USED: 0.0018 SECONDS

(1)

Der Compilerlauf wird gestartet.

(2)

Der Sprachmodus wird festgelegt, sowohl für die Übersetzung als auch für das Binden.

(3)

Mit der COMPILE-Anweisung werden die Übersetzungsläufe für die C++-Quellprogramm-Elemente PROG1 und PROG2 gestartet. In der SOURCE-Option werden in einer Liste jeweils der Name der PLAM-Bibliothek und des zu übersetzenden Bibliothekselements angegeben. Der Compiler schreibt standardmäßig die erzeugten LLMs in die Bibliothek SYS.PROG.LIB. Die Namen der LLMs werden aus den Namen der Quellprogramm-Elemente gebildet (PROG1, PROG2).

(4)

Mit der MODIFY-BIND-PROPERTIES-Anweisung werden die Module angegeben, die im nachfolgenden Bindelauf eingebunden werden sollen. Mit der INCLUDE-Option (entspricht der BINDER-Anweisung INCLUDE-MODULES) wird der Name des LLM angegeben, das die main-Funktion enthält (PROG1) sowie der Name des zusätzlich einzubindenden LLM mit dem Unterprogramm (PROG2). Die für C++-V3-Programme zusätzlich benötigten Module der C- und C++-Laufzeitbibliotheken werden automatisch (per Autolink) eingebunden (vgl. STDLIB-Option, "MODIFY-BIND-PROPERTIES").

(5)

Mit der BIND-Anweisung wird der Bindelauf gestartet. Mit der OUTPUT-Option (entspricht der BINDER-Anweisung SAVE-LLM) wird das erzeugte LLM unter dem Namen PROG als Element vom Typ L in einer PLAM-Bibliothek abgespeichert. Die BINDER-Meldung „SOME WEAK EXTERNS UNRESOLVED“ bezieht sich auf das ILCS-Modul IT0INITS. Dieses Modul enthält WEAK-EXTERN-Verweise auf alle potenziell für ILCS vorgesehenen Sprachen. Im Beispiel sind nur die Sprachen C und C++ beteiligt, die anderen Verweise bleiben offen. Zu dem vom BINDER generierten LLM-Format (in diesem Beispiel Format 4) beachten Sie bitte die OUTPUT-FORMAT-Option in der BIND-Anweisung ("BIND").

(6)

Mit der END-Anweisung wird der Compilerlauf beendet.

(7)

Mit dem START-EXECUTABLE-PROGRAM-Kommando wird das fertig gebundene Programm geladen und gestartet.