[[Vorlage(Getestet, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis]] Wenn man Programme, die in [wikipedia:COBOL:] geschrieben sind bzw. selber Programme in COBOL schreiben möchte, unter Linux kompilieren möchte, benötigt man einen Compiler wie [https://open-cobol.sourceforge.io/ GnuCOBOL] {en} (ehemals OpenCOBOL). Dieser übersetzt COBOL-Quellcode in C-Quellcode und kompiliert diesen generierten Code mittels dem [:GCC:]. Die aktuelle Version 3.2 implementiert große Teile des COBOL 85-Standards, des ISO COBOL Standards (2002, 2014, 2023) sowie viele Spracherweiterungen anderer Compiler und ermöglicht grafische Bildschirmausgaben im [:Terminal:] durch Benutzung von [wikipedia:Ncurses:]. Weiterhin ist es möglich, auf Datenbanken zuzugreifen sowie Webservices zu erstellen. Entgegen allem Anschein befindet sich GnuCOBOL in aktiver Entwicklung! = Installation = Möchte man GnuCOBOL unter Ubuntu einrichten, muss man folgendes Paket installieren [1]: {{{#!vorlage Paketinstallation gnucobol, universe }}} Es sind momentan zwei Versionen verfügbar, die man auch explizit über die Pakete gnucobol3 (aktuelles Release 3.x) und gnucobol4 (Beta-Version Version 4) auswählen kann. = Programmbeispiel = Um die Funktionsfähigkeit von GnuCOBOL zu testen, kann man das unten stehende "Hallo-Welt"-Programm in einem Editor [2] erstellen: {{{#!code cobolfree IDENTIFICATION DIVISION. PROGRAM-ID. HALLO-WELT. PROCEDURE DIVISION. DISPLAY "Hallo Welt!". STOP RUN. }}} Anschließend speichert man die Datei als '''HalloWelt.cbl''' und öffnet ein Terminal [3], in welches man folgenden Befehl zum Übersetzen des Quellcodes eingibt: {{{#!vorlage Befehl cobc -x -free HalloWelt.cbl }}} Sofern man keine Fehler gemacht hat, erscheint im selben Verzeichnis eine ausführbare Datei namens '''HalloWelt'''. Diese Datei kann man mit dem folgenden Befehl ausführen: {{{#!vorlage Befehl ./HalloWelt }}} = Wichtige Parameter = == Kompilierungsmöglichkeiten == Folgende Parameter können den Übersetzungs- und Kompilierungsprozess beeinflussen. Ohne Angabe von Parametern versucht der Compiler ein dynamisch-gelinktes Modul zu bauen. Dies entspricht dem Kommandozeilenparameter `-m`. || <-2 rowclass="titel">'''Kompilierungsmöglichkeiten''' || || '''Parameter''' || <:>'''Erläuterung''' || || `-E` || Nur [wikipedia:Pr%C3%A4prozessor:Präprozessor]. Compiler-Richtlinien ausgeführt werden. Kommentarzeilen werden entfernt. COPY-Anweisungen werden erweitert. Die Ausgabe des Ergebnisses erfolgt im Terminal || || `-C` || Der Quellcode wird in C übersetzt. Das Ergebnis wird als '''*.c''' gespeichert. Außerdem wird die dazugehörige Header-Datei erzeugt (*.h) || || `-S` || COBOL-Quelltext wird übersetzt, kompiliert und die Header- und der C-Quelltext werden zusammengefasst. Das Ergebnis wird als '''*.s''' gespeichert || || `-c` || Der Quellcode wird nur übersetzt und kompiliert, aber noch nicht gelinkt. Das Ergebnis wird als '''*.o''' gespeichert || || `-m` || Der Quellcode wird übersetzt, kompiliert und ein dynamisch-gelinktes Modul (z.B. ein Unterprogramm) wird erzeugt. Das Ergebnis wird als ''*.so'' gespeichert. Dies ist der Standard. || || `-x` || Der Quellcode wird übersetzt, kompiliert und ausführbar gemacht || || `-std=` || Kompiliert Quellcode, der für einen spezifischen Dialekt geschrieben wurde. Verfügbare Dialekte: siehe Dokumentation || || `-h` || Zeigt die Hilfe an. Hier sind weitere Parameter aufgezählt, die Code-Optimierungen oder zusätzliche Warnungen bieten || == Quellcodeformate == OpenCOBOL unterstützt sowohl fixe als auch freie Formatierungen des Quellcodes: || <-2 rowclass="titel">'''Quellcodeformate''' || || '''Parameter''' || <:>'''Erläuterung''' || || `-fixed` || Fixes Format, d.h. die ersten 6 Spalten in jeder Zeile müssen entweder frei oder durchnummeriert (z.B. `000100`, `000200`, ...) sein. Weiterhin dürfen keine Zeichen nach der 72. Spalte stehen. Dies ist der Standard. || || `-free` || Freies Format, d.h. die ersten 6 Spalten in jeder Zeile müssen __nicht__ frei gelassen bzw. nummeriert werden. Keine Spaltenbegrenzung vorhanden. __Muss__ beim Übersetzungs-/Kompilierungsbefehl mitgegeben werden, sofern dieses Format genutzt wird, um Fehler zu vermeiden. (s. obenstehendes Programmbeispiel) || Die fixe Schreibweise ohne Zahlen ist die gebräuchlichste unter COBOL-Programmierern, da man die Quelltexte somit auch unter anderen Compilern problemlos kompilieren kann, die den Parameter `-free` nicht kennen. Allerdings sollte man darauf achten, keine Compiler-spezifischen Quelltexte zu schreiben, wenn man verschiedene Compiler bedienen soll. Das "Hallo-Welt"-Programm im fixen Format ohne Nummerierung: {{{#!code cobolfree IDENTIFICATION DIVISION. PROGRAM-ID. HALLO-WELT. PROCEDURE DIVISION. DISPLAY "Hallo Welt!". STOP RUN. }}} Und mit Nummerierung: {{{#!code cobolfree 000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. HALLO-WELT. 000300 PROCEDURE DIVISION. 000400 DISPLAY "Hallo Welt!". 000500 STOP RUN. }}} Möchte man das fixe Format kompilieren und ausführbar machen, kann man das `-free` aus dem obigen Beispiel weglassen: {{{#!vorlage Befehl cobc -x HalloWelt.cbl }}} == Warnungen beim Kompilieren == {{{#!vorlage Hinweis Standardmäßig werden keinerlei Warnungen, sondern nur Fehler angezeigt! }}} Warnungen kann man über verschiedene Parameter aktivieren, z.B.: || <-2 rowclass="titel"> '''Warnungen beim Kompilieren''' || || '''Parameter''' || <:>'''Warnungen''' || || `-Wall` || Alle Warnungen werden angezeigt. || || ``-Wcolumn-overflow`` || Warnt, wenn im Quellcode Zeichen nach der 72. Spalte stehen. || || `-Wparentheses` || Warnt, wenn Klammern um eine AND-Verknüpfung in einer OR-Verknüpfung vergessen wurden. || Die Dokumentation enthält eine ausführliche Beschreibung der vorhandenen Parameter. = Links = * [sourceforge:open-cobol:GnuCOBOL Projektseite] {en} * [https://gnucobol.sourceforge.io/faq/index.html GnuCOBOL FAQ] {en} #tag: Programmierung