claim.gif
Linux Magazin Linux User Easy Linux Ubuntu User International Linux Community
Erschienen in EasyLinux 09/2006   »   Ausgabe bestellen

Programme aus dem Quellcode übersetzen

Handarbeit

Andrea Müller


Wenn es ein Programm nicht als fertiges Paket für die eigene Distribution gibt, raten langjährige Linux-Nutzer oft dazu, die Anwendung selbst zu kompilieren. Wir erklären, wie das geht und verraten, warum es meistens nicht auf Anhieb klappt.

Selbst wer Linux erst seit kurzem benutzt, stößt immer wieder auf Software, die sich in einem gepackten Archiv mit der Endung tar.gz oder tar.bz2 befindet. Nach dem Entpacken findet man im neu entstandenen Verzeichnis viele Dateien und Unterverzeichnisse und erfährt durch Recherche oder auf Mailinglisten, dass es sich dabei nicht um Programme handelt, sondern um den Quellcode einer Anwendung, den man erst kompilieren muss [1].

Wer sich daran schon einmal als unerfahrener Benutzer versucht hat, erinnert sich wahrscheinlich an einen ganzen Wust von Fehlermeldungen und daran, dass er das Experiment, ein Programm selbst zu übersetzen, frustriert abgebrochen hat. Viele Anwender glauben gar, man müsse selbst programmieren können, um Software zu kompilieren. Ein wenig Grundlagenwissen benötigen Sie tatsächlich, doch keine Programmierkenntnisse. Mit dem richtigen Handwerkszeug ist es nicht schwer, Software selbst zu übersetzen und mit ein wenig Erfahrung werden Sie nicht mehr darauf verzichten wollen. Manches kleine Tool, für das es keine Distributionspakete gibt oder neue Programmversionen, finden so mit ein wenig Handarbeit den Weg auf Ihren Desktop.

Graue Theorie

In den Quelltextarchiven, man nennt sie auch "Tarbälle", da die Dateien sich meistens in einem Tar-Archiv befinden, liegen Dateien, die Sie mit einem Texteditor wie KWrite öffnen können. Dort steht der Code einer Anwendung in einer Programmiersprache wie C oder C++. Außerdem liegt meistens ein Skript namens configure bei, das feststellt, mit welchen Parametern das Programm auf Ihrem System übersetzt werden muss.

Neben den Dateien, die zum Übersetzen der Anwendung nötig sind, gibt es fast immer auch Dokumentation, die Sie in Dateien namens README und INSTALL finden. Manchmal enthält das Archiv ein Unterverzeichnis doc mit weiteren Hilfedateien. Die Dokumentation sollte immer ihre erste Informationsquelle sein, wenn Sie ein Programm selbst übersetzen wollen. Englischkenntnisse sind dabei Pflicht, da diese Dateien fast nie lokalisiert werden. Hapert es mit der englischen Sprache, können Sie es auch ohne Dokustudium versuchen. Falls dem Quelltext ein configure-Skript beiliegt, stehen die Chancen gut, dass Sie auch so zum Erfolg kommen.

Die meisten Programme übersetzen Sie mit den drei Befehlen ./configure, make und make install, wobei Sie den letzten, den Installationsbefehl, gewöhnlich als root aufrufen müssen. Dass die Installation nicht auf Anhieb klappt, liegt daran, dass die Distributionen standardmäßig keine Pakete einspielen, die Sie zum Übersetzen von Software benötigen. Die meisten befinden sich jedoch auf den Installationsmedien und Sie spielen sie bequem mit dem Paketmanager ein.

Grundausstattung

Möchten Sie selbst Software kompilieren, ist der Compiler das wichtigste Werkzeug. Er erzeugt aus dem Quelltext binäre Programmdateien. Um ihn einzuspielen, starten Sie die Softwareverwaltung Ihrer Distribution und installieren das Paket gcc, das Sie mit der Suchfunktion am schnellsten finden (Abbildung 1). Mit diesem Compiler übersetzen Sie Software, die in der Programmiersprache C geschrieben ist. Um auch KDE-Anwendungen kompilieren zu können -- sie sind in der Programmiersprache C++ geschrieben -- installieren Sie außerdem das Paket gcc-c++. Unter Kubuntu befindet sich der C++-Compiler im Paket g++. Bei der Installation der beiden Compiler spielen die Distributionen automatisch weitere Entwicklerpakete ein, unter anderem glibc-devel.

Abb. 1: Pakete zum Übersetzen von Software, wie etwa den C-Compiler "gcc" spielen Sie über die Paketverwaltung, hier mit YaST, ein.

Pakete mit devel (bei Kubuntu dev) im Namen enthalten so genannte Header-Dateien von Bibliotheken. Bibliotheken stellen Anwendungen bestimmte Funktionen, etwa zum Öffnen einer Datei, zur Verfügung und können, wie DLL-Dateien unter Windows, von mehreren Programmen benutzt werden. Diese Funktionen sind in den Header-Dateien mit der Endung .h definiert und landen bei der Installation im Verzeichnis /usr/include. Benutzt eine Software eine Bibliothek, benötigen Sie zum Übersetzen immer das entsprechende Paket mit der Endung devel oder dev. Wollen Sie beispielsweise einen Bildbetrachter kompilieren, nutzt dieser wahrscheinlich die Bibliothek libpng zum Anzeigen von Bildern im PNG-Format. Um das Programm zu übersetzen, muss sich daher das Paket libpng-devel auf Ihrem System befinden.

Da Sie wahrscheinlich meistens grafische Anwendungen übersetzen wollen, gehört auch das Paket xorg-X11-devel zur Grundausstattung. Darin befinden sich die Header-Dateien des grafischen Systems [2]. Außerdem benötigen Sie noch autoconf, automake und make. In diesen drei Paketen stecken sich Hilfsanwendungen, die das Übersetzen von Software automatisieren.

Bei fast allen Anwendungen steht der Quelltext nicht in einer einzigen Datei, sondern ist über mehrere verteilt. Um ein solches Programm zu übersetzen, sind viele Compiler-Aufrufe nötig. Damit Sie diese nicht von Hand eingeben müssen, erzeugt der configure-Aufruf eine Datei namens Makefile, die alle Anweisungen für den Compiler und die Pfade zu den Bibliotheken und Header-Dateien auf Ihrem System enthält. Damit das reibungslos klappt, benötigen Sie die drei oben genannten Pakete. Das Programm make erledigt beispielsweise die Aufgabe, das Makefile auszuwerten und alle Compiler-Aufrufe in der richtigen Reihenfolge abzuarbeiten.

Mit diesen Paketen befindet sich die absolut nötige Grundausstattung zum Kompilieren von Software auf Ihrer Festplatte und Sie können einen ersten Versuch starten.

Selbst Hand anlegen

Zu wissen, was beim Kompilieren von Software geschieht und worauf man achten muss, ist zwar interessant, aber die meisten Erfahrungen sammelt man in der Praxis: Im folgenden Beispiel erklären wir, wie Sie die neueste Version des Spiels Lbreakout [3] (Abbildung 2) übersetzen. Ziel des Desktop-Spaßes ist es, mit Ball und Schläger bewaffnet, mehrere Reihen von Steinen abzuschießen, wobei einem Bonus- und Malus-Symbole entweder helfen oder ein Bein stellen.

Abb. 2: Ein Desktop-Spiel wie Lbreakout ist schnell selbst übersetzt.

Zunächst einmal gilt es, das nötige Handwerkszeug zusammenzutragen: Das wichtigste ist der Quellcode der Anwendung, den Sie unter [4] finden. Laden Sie das Archiv mit der Endung tar.gz herunter und speichern Sie es in Ihrem Home-Verzeichnis. Im Konqueror klicken Sie die Datei lbreakout2-2.6beta-7.tar.gz mit der rechten Maustaste an und entscheiden sich im Kontextmenü dafür, den Inhalt ins aktuelle Verzeichnis zu entpacken. Dort finden Sie danach den Ordner lbreakout2-2.6beta-7. Falls inzwischen eine neuere Version des Spiels erhältlich ist, ändert sich die Nummer im Verzeichnisnamen.

Wechseln Sie in den Ordner mit dem Quelltext und werfen Sie dort einen Blick in die Dateien INSTALL und README. Beide liefern wichtige Informationen zum Übersetzen von Lbreakout -- allerdings nur in englischer Sprache. Die erstgenannte enthält einen Standardtext und verrät die Befehle, mit denen Sie das Programm übersetzen. Wesentlich interessanter ist der Inhalt der Datei README. Im Abschnitt Requirements (Abbildung 3) erfahren Sie, dass Sie zum Kompilieren von Lbreakout X11 und SDL mindestens in Version 1.1.4 benötigen. Das grafische System X11 befindet sich auf jedem Desktop-Linux und dessen Entwicklerdateien (xorg-devel) sollten Sie bereits im Abschnitt Grundausstattung dieses Artikels installiert haben.

Bei SDL handelt es sich um eine Bibliothek, die sehr oft von Spieleprogrammierern verwendet wird. Die dazu passenden Entwicklerpakete legen die Distributoren jedoch nicht vollständig bei. Sie finden diese Pakete auf der Heft-CD, die sich als Installationsquelle bei der distributionseigene Paketverwaltung einträgt.

Abb. 3: Meistens liegt dem Quelltext eine Datei namens "README" bei, die erklärt, welche Pakete Sie benötigen, um das Programm zu übersetzen.

Starten Sie die Softwareverwaltung und spielen Sie die folgenden Pakete ein:

Die Distributionen fordern dabei eventuell die Installationsmedien an, um weitere benötigte Software zu installieren. Das Devel-Paket der Bibliothek libSDL enthält die Entwicklerdateien der libSDL, die anderen beiden Pakete enthalten Header-Dateien mit Funtionen zur Soundausgabe und Darstellung von Grafiken.

Von den Quellen zum Programm

Das Kompilieren erledigen Sie auf der Shell: Klicken Sie dazu den Ordner mit dem Quelltext mit der rechten Maustaste an und wählen Sie Aktionen / Terminal öffnen im Kontextmenü (Abbildung 4). Damit startet eine Konsole, in der Sie sich bereits im richtigen Verzeichnis befinden.

Abb. 4: Über das Kontextmenü des Konqueror öffnen Sie im Handumdrehen eine Shell im richtigen Ordner.
  1. Als erstes geben Sie das Kommando
    ./configure
    ein. Es ermittelt, wo die benötigten Bibliotheken und Entwicklerdateien auf Ihrem System liegen und erstellt mehrere Makefiles (Abbildung 5). Die Statusmeldungen des Skripts verraten, was das Programm gerade überprüft, laufen jedoch so schnell über den Bildschirm, dass Sie diese kaum lesen können. Beachten Sie, dass Sie das Skript mit vorangestelltem ./ aufrufen müssen, da sich unter Linux das aktuelle Verzeichnis nicht im Suchpfad für Programme befindet.
    Der einfache Befehl ohne Optionen benutzt die Standardeinstellungen, bei denen das Programm und seine Dateien bei der folgenden Installation in Ordnern unterhalb von /usr/local landen. Mit dem Aufrufparameter --prefix= gefolgt von einem Verzeichnis können Sie einen anderen Installationsordner angeben. Das ist dann interessant, wenn Sie auf einem System, auf dem Sie keine Administratorrechte haben, Software nutzen wollen, welche nicht bei der Distribution dabei ist. Welche Parameter das configure-Skript kennt, verrät es, wenn Sie es mit dem Parameter --help aufrufen. So bestimmen Sie mit
    ./configure --disable-install
    dass keine Installation von Lbreakout nötig ist und Sie das Spiel direkt aus dem Quellcode-Verzeichnis starten können. Das ist praktisch, wenn Sie sich nicht sicher sind, ob Sie die Software wirklich behalten wollen. Gefällt Ihnen das Programm nicht, entfernen Sie es einfach durch Löschen des Ordners lbreakout2-2.6beta-7.
  1. Mit dem Kommando
    make
    kompilieren Sie die Software. Auch dieses Programm gibt sehr viel Text aus. So sehen Sie unter anderem alle Compiler-Aufrufe. Je nach der Geschwindigkeit Ihres Prozessors und der Speicherausstattung dauert es ein wenig, bis das Tool mit der Arbeit fertig ist; auf einem Pentium M 1300 mit 512 MByte RAM dauert es keine 3 Minuten Lbreakout zu kompilieren. Steht in der letzten Zeile keine Fehlermeldung, die mit Fehler oder Error beginnt, hat alles geklappt.

  1. Haben Sie das configure-Skript nicht mit dem Parameter --disable-install aufgerufen, müssen Sie Lbreakout noch installieren. Da nur der Administrator systemweite Software einspielen darf, werden Sie mit su und Eingabe des root-Passworts in der nächsten Zeile zum Systemverwalter. Unter Kununtu erlangen Sie mit sudo su und Ihrem Benutzerpasswort Administratorrechte.
  1. Der Aufruf von
    make install
    kopiert die Programmdatei lbreakout2, Sounds und Grafiken in die Verzeichnisse unterhalb von /usr/local. Sobald Sie wieder die Möglichkeit haben, Befehle einzugeben, drücken Sie [Strg-D], um als normaler Benutzer zu arbeiten.

Nun kann jeder die Desktop-Unterhaltung über ein Schnellstartfenster, in das er lbreakout2 eingibt, starten. Haben Sie das configure-Skript mit dem Parameter --disable-install aufgerufen, ist der Anwendungsstart etwas komplizierter: Wechseln Sie mit cd /home/ihr_benutzername/lbreakout2-2.6beta-7/client in den Ordner mit der Programmdatei und geben Sie dort ./lbreakout2 ein. Sie müssen sich beim Aufruf in diesem Ordner befinden, da das Programm sonst abstürzt.

Abb. 5: Findet das "configure"-Skript alle benötigten Dateien, erzeugt es mehrere Makefiles. Diese enthalten alle Informationen zum Kompilieren der Software.

Stolperfallen umgehen

Selbst wenn das Kompilieren des Spiels nach der Anleitung dieses Workshops auf Anhieb funktioniert hat, werden Sie es immer wieder erleben, dass beim Übersetzen von Software Fehler auftreten. Meistens beschwert sich das configure-Skript darüber, dass es eine Datei oder Bibliothek nicht findet. Eine solche Meldung könnte beispielsweise so lauten:

configure: error: Cannot find nc\
urses.h

Da die vermisste Datei oft nicht so heißt, wie das Paket, in dem Sie steckt, ist guter Rat erst einmal teuer. Die Suchmaschine unter http://www.rpmseek.com verrät Ihnen in einem solchen Fall, nach welchem Paket Sie suchen müssen. Anders als der Name vermuten lässt, findet man auf der Seite auch die Namen von Paketen im DEB-Format, das Kubuntu verwendet.

Geben Sie in das Suchfeld den Namen der Datei ein und setzen Sie ein Häkchen vor Paket enthält die Datei (Abbildung 6). Ein Klick auf go liefert eine Liste der Pakete, in denen die Datei steckt. Bevor Sie nun versuchen, im Netz ein passendes Paket für Ihre Distribution zu finden, sollten Sie die Suchfunktion der Paketverwaltung bemühen. Viele Entwicklerpakte bringen die Distributionen mit, obwohl sie diese nicht standardmäßig einspielen.

Abb. 6: Mit der Suchmaschine "rpmseek.com" erfehren Sie schnell, in welchem Paket sich eine bestimmte Datei befindet.

Dass configure eine Datei oder Bibliothek nicht findet ist die am häufigsten auftretende Fehlermeldung beim Übersetzen von Software. Hilft Ihnen das bei einem Kompilierproblem nicht weiter, finden Sie eventuell unter [5] oder [6] eine Lösung. Wer sich lieber mit anderen Linux-Nutzern austauscht, ist in Newsgroups [7] oder auf den EasyLinux-Mailinglisten [8] genau richtig. Die Teilnehmer haben viele gute Tipps auf Lager und helfen auch unerfahrenen Nutzern gerne weiter. (amu)

Infos
[1] Grundlagenartikel über das Kompilieren von Software: Carsten Schnober, "Sprachprobleme", EasyLinux 04/2005, S. 54 f.
[2] Artikel über das grafische System: Kristian Kißling, "Doktor Xorg", EasyLinux 10/2005, S. 63 ff.
[3] Lbreakout-Artikel: Andrea Müller, "Ausbruch aus dem Alltag", EasyLinux 11/2003, S. 52 ff., http://www.easylinux.de/2003/11/052-lbreakout/
[4] Lbreakout-Download: http://lgames.sourceforge.net/downloads.php
[5] Artikel über configure-Fehler: Andrea Müller, "Fehler-Fahnder", LinuxUser 06/2004, S. 28 ff., http://www.linux-user.de/ausgabe/2004/06/028-configure/
[6] Artikel über Fehlermeldungen von make: Andrea Müller, "Handgemacht", LinuxUser 06/2004, S. 32 ff., http://www.linux-user.de/ausgabe/2004/06/032-make/
[7] Usenet-Artikel: Andrea Müller, "Wegweiser ins Nutznetz", EasyLinux 04/2005, S. 36 ff.
[8] Alles über die EasyLinux-Mailinglisten: Marcel Hilzinger, "Hilfe zur Selbsthilfe", Easylinux 03/2006, S. 16, Anmeldung unter http://www.easylinux.de/Kontakt/Mailinglisten -- auf der Jahres-CD

Software zum Artikel auf DVD: Entwicklerdateien der "libSDL"

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.

Druckerfreundliche Version | Feedback zu dieser Seite | Datenschutz | © 2017 COMPUTEC MEDIA GmbH | Last modified: 2008-11-05 17:02

Nutzungsbasierte Onlinewerbung

[Linux-Magazin] [LinuxUser] [Linux-Community] [Admin-Magazin] [Ubuntu User] [Smart Developer] [Linux Events] [Linux Magazine] [Ubuntu User] [Admin Magazine] [Smart Developer] [Linux Magazine Poland] [Linux Community Poland] [Linux Magazine Brasil] [Linux Magazine Spain] [Linux Technical Review]