21.14 Wichtige Bibliotheken
Bevor wir dieses Kapitel abschließen, seien noch einige Worte zu sehr populären Bibliotheken gesagt. Diese Bibliotheken stehen alle sowohl unter Linux als auch unter den BSD-Betriebssystemen zur Verfügung und sind frei verfügbar.
21.14.1 Entwicklung grafischer Oberflächen
Zur Entwicklung grafischer Oberflächen stehen neben der blanken Xlib noch weitere bekannte Bibliotheken zur Verfügung. Dazu zählen:
- ncurses
- Bei ncurses handelt es sich um eine Bibliothek zur Erstellung »grafischer« Oberflächen auf Konsolenebene.
- OpenMotif
- OpenMotif ist eine Bibliothek, die sehr an das ältere Aussehen der Unix-Oberfläche erinnert. Der Nachteil von OpenMotif ist der komplexe Quellcode. Neben OpenMotif existieren noch die kostenpflichtige Variante Motif und die unter der LGPL lizenzierte Variante LessTif (http://www.lesstif.org).
- Tk
- Tk wurde primär dafür entwickelt, grafische Oberflächen für Tcl-Skripts zu entwickeln. Allerdings kann man Tk beispielsweise auch in der Perl- und C-Programmierung verwenden. Von Letzterer raten wir Ihnen aus eigener Erfahrung ab. Weichen Sie stattdessen auf Gtk oder Qt aus.
- Gtk
- Das Gimp Tool Kit (Gtk) ist eine Library, die ursprünglich dafür entwickelt wurde, das Grafikprogramm Gimp zu entwickeln. Mittlerweile wurden eine Menge populärer Programme wie der IRC-Client xchat oder die Desktop-Oberfläche GNOME mithilfe der Gtk-Library entwickelt. Weitere Informationen zu dieser Bibliothek finden Sie unter gtk.org. Ein Vorteil von Gtk besteht darin, dass es auf verschiedenen Platformen, u.a. auch auf Windows, verfügbar ist. Zudem kann es in Verbindung mit Ruby, Perl und C hervorragend verwendet werden.
- Qt
- Die norwegische Firma Trolltech (trolltech.no) hat die objektorientierte Bibliothek Qt entwickelt. Qt ist eine C++-Library und ziemlich umfangreich. Der Vorteil von Qt besteht darin, dass es zum einen sehr portabel ist und dass man zum anderen mit relativ wenig Code relativ viel bewirken kann. Die KDE-Desktop-Oberfläche sowie deren Komponenten basieren auf der Qt-Bibliothek, was seit vielen Jahren zur Popularität derselben beiträgt. Qt ist quelloffen und nur für den kommerziellen Gebrauch kostenpflichtig.
- OpenGL
- Die OpenGL-Bibliothek ermöglicht grafische Programmierung auf hohem Niveau. Fast alle guten Linux-Spiele sind mit dieser Library realisiert worden, wozu auch viele aktuelle kommerzielle Spiele zählen.
»Hello World« am Beispiel von Qt
Wir möchten Ihnen ein kleines »Hello World«-Programm am Beispiel von Qt nicht vorenthalten. Für Qt haben wir uns aus persönlichen Geschmacksgründen entschieden, weil man mit dieser Bibliothek am komfortabelsten GUIs entwickeln kann.
Anders als bei Gtk+ muss man sich bei Qt nicht mit meterlangen Funktionsnamen herumschlagen und spart Unmengen an Quellcode!
Ein Qt-basiertes »Hello World«-Programm sieht in C++ folgendermaßen aus:
#include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton hello("Hello World"); hello.resize(80, 20); hello.show(); return app.exec(); }
Listing 21.83 hello.cpp
Für eigentlich jedes Qt-Widget gibt es eine eigene Header-Datei. In diesem Fall benötigen wir nur die primäre Header-Datei für die Erstellung einer Qt-Anwendung (QApplication) sowie die Header-Datei für den »Push Button« (QPushButton). Ein Push Button ist eine Schaltfläche, der man im Anwendungsfenster eine Größe, eine Aufschrift, eine Aktion usw. zuordnen kann.
In der main()-Funktion erstellen wir zunächst ein QApplication-Objekt »app« dem wir die Aufrufparameter der main()-Funktion übergeben. Danach erstellen wir einen Objekt eines QPushButtons, dem wir die Aufschrift »Hello World« verpassen.
Mit der resize()-Methode werden die Maße des Buttons festgelegt und mit der show()-Methode wird er im Fenster der Anwendung sichtbar. Anschließend wird die Kontrolle noch der exec()-Funktion der QApplication übergeben, womit Qt die Kontrolle über die Anwendung übernimmt.
Kompilieren
Erstellt wird die Programmdatei automatisch durch qmake, das das Verzeichnis nach C++- und Header-Dateien untersucht und automatisch eine Makefile generiert. Anschließend müssen wir noch das eigentliche make-Programm aufrufen, um die erzeugte Makefile zu benutzen.
$ qmake -project $ qmake $ make
Listing 21.84 Das Projekt übersetzen
Startet man das Programm, dann sollte man den »Hello World«-Button erkennen. Der Button verfügt bisher über keine Funktion, doch er ist bereits sichtbar.
Abbildung 21.6 Das Qt-»Hello World«-Programm
Funktionalität
In Qt werden Objekte mit einer Funktionalität verbunden, indem man sie »connected«. Möchte man beispielsweise das Programm beenden, wenn der obige Button angeklickt wurde, so übergibt man den Button als ersten Parameter an die connect-Methode, die ihn mit dem Signal clicked() verbinden und ihn durch quit() beenden soll.
Object::connect(&hello, SIGNAL(clicked()), &app, SLOT(quit()));
Listing 21.85 Hello-Button connecten
21.14.2 Weitere Bibliotheken
Neben den oben erwähnten populären Grafikbibliotheken existieren noch einige weitere erwähnenswerte Bibliotheken, die wir Ihnen selbstverständlich nicht vorenthalten möchten.
- libc
- Die Standard-C-Bibliothek
- libstdc++
- Die ANSI C++-Library von GNU
- PCAP
- Die packet capture library bietet Zugriff auf den TCP/IP-Link-Layer. Hiermit lassen sich Pakete – etwa Ethernet- oder PPP-Frames -- abfangen. Viele Sniffer (u.a. tcpdump) verwenden diese Bibliothek. Der enorme Vorteil besteht darin, dass PCAP recht portabel ist und man sich durch die Verwendung der Library-Funktionen am direkten Zugriff auf die systemabhängigen Zugriffsmechanismen für den Link-Layer vorbeischummeln kann. <Dazu zählen etwa das Data-Link Provider-Interface (DLPI) und der BSD Packet Filter.>
- LibXML2
- Eine Library zur Verarbeitung von XML-Daten
- libUSB
- Eine Library für den Zugriff auf den Universal Serial Bus (USB)
- libunicode
- Diese Library bietet Funktionalitäten, um Unicode-Zeichen und -Strings zu bearbeiten. Dabei werden UTF-8 und UCS-2 unterstützt.
- libICQ2000
- Diese Library implementiert das ICQ2000/2001-Protokoll, mit dem der bekannte gleichnamige Instant Messenger kommuniziert.
- libpng
- Eine Library zum Erstellen und Lesen von PNG-Bilddateien
- tiff
- Eine Library zur Arbeit mit tiff-Bilddateien
- libungif
- Eine Library zur Arbeit mit gif-Bilddateien
- libmpeg2
- Eine Library zum Dekodieren von MPEG-2-Videostreams
- readline
- Eine Library, um benutzerfreundliche Eingaben auf Konsolenebene in das eigene Programm zu implementieren
- libtar
- Eine Library zur Manipulation von tar-Archivdateien
- zlib
- Eine Library zur Kompression von Daten