Bewährtes

Visual Studio von Microsoft ist eine Entwicklungsumgebung für Software, die professionellen Ansprüchen genügt. Mit

  • MFC (Microsoft Foundation Classes) für C++-Programmierung
  • .NET für C#-Programmierung

stehen Bausteine zur Verfügung, die eine Programmierung auf einem höheren Niveau ermöglichen, ohne die Bestandteile eines Rades jedes Mal neu erfinden zu müssen.

Die Eigenschaften von „Mickymaus 10“ und die zugehörige Produktpolitik von Microsoft bringen den Autor jedoch zu einem Wechsel auf Linux als Hauptsystem einschließlich Softwareentwicklung.

Programmiersprachen unter Linux

Unter Linux haben wir die Programmiersprachen

  • C
  • C++
  • Java
  • Fortran

wenn man mal von Exoten absieht. Fortran war schon vor 30 Jahren die Sprache der „Ewiggestrigen“. Sie ist für die Echtzeitprogrammierung (Hochspannungsnetze, Pipelines, Wasserwerke etc.) in keiner Weise angemessen. Einige Physiker argumentieren, Fortran könne mit komplexen Zahlen rechnen (C# seit .NET 4.0). Das ist zwar richtig, aber C++ konnte dies auch schon immer. Mit Python und einigen Mathematik-Modulen (Spyder, Jupyter) ist dies auch kein Problem. Außerdem gibt es noch Mathematikprogramme wie Scilab, Maple etc.

Ein unter Windows entwickeltes Hexdump-Programm in Java konnte ohne jegliche Quelltextänderung unter Linux genutzt werden. Unter Java sind jedoch bewusst Eigenschaften des Betriebssystems verborgen, wie z.B. Zugriffsrechte für Dateien, Besitzer dieser u.ä.

Außerdem, wenn bei einem Atomreaktor schnell die Bremsstäbe eingefahren werden müssen, kann die Software nicht sagen: „Moment! Ich muss erst eine ‚garbage collection‘ durchführen.“

Konfortverlust unter Linux

Deshalb soll dieser Artikel sich auf die Softwareentwicklung mit C++ beschränken. Beim Wechsel zur Programmierung mit C++ unter Linux kommt zunächst einmal Frust auf. Es gibt nur den Sprachumfang von Bjarne Stroustrup und die üblichen Strukturen, wie sie bei Unix-Compilern existieren. D.h. es sind reine C-Schnittstellen. Windows hat aber auch nur C-Schnittstellen. Die MFC sind eine darüberliegende Schicht zur Programmierung mit C++.

Welche Werkzeuge haben wir dafür? Wenn man mal von den „nackten“ Compilern (gcc, g++) absieht, gibt es

  • Geany
  • Anjuta
  • Codelite
  • Eclipse

Geany ist eigentlich ein Editor mit Syntaxeinfärbung. Er kann aber auch Programme, die aus nur einer Datei bestehen, compilieren lassen und starten. Wenn man die Zeit-, Datumsstrukturen und Directory-Eigenschaften untersuchen möchte, reicht dieses völlig aus.

Anjuta ist eine Entwicklungsumgebung für C/C++. Sie kann Bibliotheken aber nur mit C erzeugen, nicht mit C++. Zusätzlich ist es irritierend, dass für das Demoprogramm ‚hello world‘ ca. 4 MB ‚Mülldateien‘ erzeugt werden, u.a. eine Datei mit der GNU-Lizenz. Wenn ich ein privates Programm entwickle, interessieren mich keine Lizenzen.

Codelite kann Bibliotheken in C und C++ erzeugen. Nähere Erfahrungen liegen damit nicht vor.

Eclipse ist von der Java-Entwicklung unter Windows bekannt und die einzige Entwicklungsumgebung, die Visual Studio nahekommt. Mit dem passenden Plugin kann man sie auch zur Entwicklung mit C/C++ nutzen. Bis hierhin ist die Schlussfolgerung für Eclipse richtig. Es gibt aber unter den gängigen aktuellen Linux-Distributionen

  • Debian 10
  • Ubuntu 18.04 LTS (long term support)

ein Problem mit Eclipse.

Schwierigkeiten mit Eclipse

Debian 10 enthält kein Eclipse zur Zeit, da sich kein Bearbeiter gefunden hat! Unter Ubuntu 18.04 kann man zwar Eclipse mit dem C++-Plugin installieren. Es läuft aber nicht. Zur Zeit von Debian 9 kam beim Aufruf von Eclipse eine Warnung, dass der Aufruf mit einem bestimmten Parameter seit jdk8 (Java-Compiler) nicht mehr unterstützt wird. Nach dieser Warnung konnte man aber Eclipse nutzen.

Beim Aufruf von Eclipse unter Ubuntu 18.04 kommt stattdessen eine Fehlermeldung und ein Abbruch von Eclipse. Man kann also mit beiden aktuellen Distributionen keine C++-Programme entwickeln, Java  natürlich auch nicht. Was gibt es für einen Ausweg? Nun, wir installieren Debian 9.9 (die letzte Variante der Version 9) in einer virtuellen Maschine.

Was kommt dafür in Frage? VMware Workstation (die kostenpflichtige Version) gibt es nur für Windows und Ubuntu, nicht jedoch für Debian. Virtualbox von Oracle gibt es für Windows und mehrere bekannte Linux-Distributionen. Also ist letztere die Virtualisierung der Wahl.

Einrichtung von Virtualbox

Unter Windows installieren wir z.B. virtualbox-6.1.2-135663-win.exe und die dazugehörigen Erweiterungen Oracle_VM_VirtualBox_Extension_Pack-6.1.2.vbox-extpack.

Unter Ubuntu ist Virtualbox in den Paketquellen enthalten und kann mit Synaptic nachinstalliert werden. In den Debian-Paketen ist Virtualbox nicht enthalten, daher lädt man bei Oracle ein entsprechendes DEB-Paket herunter und installiert dieses gemäß deren Dokumentation an der Paketverwaltung vorbei.

Konfiguration der zukünftigen VM

Bild 1: Konfiguration der zukünftigen VM

Konfiguration des gemeinsamen Ordners

Bild 2: Konfiguration des gemeinsamen Ordners

Nacharbeiten für Virtualbox

Zunächst sind jedoch die Voraussetzungen sicherzustellen. Für Debian ermittelt man zunächst deren Kernelversion.

Kernelversion, hier 4.9.0-12

Bild 3: Kernelversion, hier 4.9.0-12

Gemäß Buch (L1) sind für dieses Debian also gcc, make und linux-header Dateien für Version 4.9.0-12 zu installieren. Unter Ubuntu sind diese Voraussetzungen standardmäßig installiert.

ISO-Datei mit Gasterweiterungen

Bild 4: ISO-Datei mit Gasterweiterungen

Gasterweiterungen einbinden

Dann ist die ISO-Datei (DVD-Image) mit den Virtualbox-Erweiterungen für das Gastbetriebssystem einzubinden.

In Windows befindet sich diese im Wirtssystem unter

  • C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso

Es ist dann darin mit Admin-Rechten

  • VboxWindowsAdditions-amd64.exe ​​​​

auszuführen.

In Linux (Debian und Ubuntu) im Wirtssystem unter

  • /usr/share/virtualbox/VboxGuestAdditions.iso

Es ist dann darin auszuführen

$ sudo sh ./autorun.sh

Man beachte den Punkt vor dem Schrägstrich.

Dann muss der eigene Benutzer in die Gruppe der Vboxbenutzer aufgenommen werden. Dies geschieht durch

$ sudo usermod -a -G vboxusers reinhold

„reinhold“ ist durch den eigenen Benutzernamen zu ersetzen. Sollte dann eine Fehlermeldung kommen „Gruppe vboxusers existiert nicht!“, ermittle man den Gruppennamen durch

$ groups
reinhold cdrom floppy audio dip video plugdev netdev bluetooth lpadmin scanner vboxsf.

Dann wiederhole man das vorherige Kommando mit „vboxsf“!

Danach ist die virtuelle Maschine mit diesem Debian 9.9 neu zu starten. Jetzt sollte das konfigurierte „gemeinsame Verzeichnis“ unter /media/VM_xchg zu finden sein. Schreibberechtigung prüft man dort durch

$ touch /media/VM_xchg/test.txt

Sollte keine Fehlermeldung kommen, stimmen die Schreibrechte. Ist dies nicht der Fall, ändere man dies zunächst durch:

$ sudo chgrp reinhold ./VM_xchg
$ sudo chown reinhold ./VM_xchg

Sollten dann die Schreibrechte immer noch nicht passen, hilft die brutale Methode

$ chmod 0777 ./VM_xchg

Dadurch wird das Datenaustauschverzeichnis für alle Benutzer dieses Rechners zum Lesen, Schreiben und Hineinwechseln freigegeben. Unter einem Unix-System mit mehreren Benutzern würden wir natürlich nicht so freizügig die Rechte erweitern.

Nach diesen Vorarbeiten kann die Softwareentwicklung in C++ unter Linux beginnen.

Literatur

L1:    Michael Kofler, Linux – Das umfassende Handbuch, Rheinwerk Computing Bonn

L2:    Marcus Fischer, Ubuntu 18.04 LTS, Rheinwerk Computing Bonn