Simon! Ich weiß wie du dich fühlst; Ich hatte auch mit diesem Teil des Lernens von Linux zu kämpfen. Aufgrund meiner eigenen Erfahrungen habe ich ein Tutorial zu einigen der von Ihnen angesprochenen Themen geschrieben (hauptsächlich als Referenz für mich!): Http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . Ich denke, Sie werden meinen Hinweis zu schätzen wissen, wie einfach Python-Anwendungen zu erstellen / installieren sind. :)
Hoffe das hilft! Und viel Spaß beim Kompilieren.
Tim Jones
Erstellen / Installieren einer Anwendung aus dem Quellcode in Ubuntu Linux
Während die Ubuntu-Repositories voll von großartigen Anwendungen sind, werden Sie auf die eine oder andere Weise auf das "Must-Have" -Tool stoßen, das sich nicht in den Repositories befindet (oder kein Debian-Paket hat) oder das Sie brauchen neuere Version als in den Repositories. Wie geht's? Nun, Sie müssen die Anwendung aus dem Quellcode erstellen! Keine Sorge, es ist wirklich nicht so kompliziert, wie es sich anhört. Hier sind einige Tipps, die auf meinen Erfahrungen als Amateur basieren! (Während ich Ubuntu für dieses Beispiel verwende, sollten die allgemeinen Konzepte für die meisten Unix / Linux-Distributionen wie Fedora und sogar für die Cygwin-Plattform unter Windows gelten.)
Der grundlegende Prozess zum Erstellen (Kompilieren) der meisten Anwendungen aus dem Quellcode folgt dieser Reihenfolge: configure -> compile -> install. Die typischen Unix / Linux-Befehle für diese Aufgaben sind: config
-> make
-> make install
. In einigen Fällen finden Sie sogar Webseiten, die zeigen, dass alle diese Befehle zu einem einzigen Befehl kombiniert werden können:
$ config && make && make install
Bei diesem Befehl wird natürlich davon ausgegangen, dass bei keinem dieser Schritte Probleme auftreten. Hier kommt der Spaß ins Spiel!
Anfangen
Wenn Sie noch keine Anwendung aus dem Quellcode auf Ihrem System kompiliert haben, müssen Sie sie wahrscheinlich mit einigen allgemeinen Entwicklungstools wie der gcc
Compiler-Suite und einigen allgemeinen Header-Dateien einrichten (stellen Sie sich dies als Code vor, der bereits geschrieben wurde von einer anderen Person, die von dem zu installierenden Programm verwendet wird), und dem make-Tool. Glücklicherweise gibt es in Ubuntu ein so genanntes Metapaket build-essential
, das dies installiert. Um es zu installieren (oder stellen Sie einfach sicher, dass Sie es bereits haben!), Führen Sie diesen Befehl im Terminal aus:
$ sudo apt-get install build-essential
Nachdem Sie die Grundkonfiguration vorgenommen haben, laden Sie die Anwendungsquelldateien herunter und speichern Sie sie in einem Verzeichnis, für das Sie Lese- / Schreibberechtigungen haben, z. B. in Ihrem Basisverzeichnis. Normalerweise befinden sich diese in einer Archivdatei mit der Dateierweiterung entweder .tar.gz
oder .tar.bz2
. Das .tar
bedeutet einfach , dass es ein „Band - Archiv“, das eine Gruppierung von Dateien, die ihre relative Verzeichnisstruktur erhalten bleiben. Das .gz
steht für gzip (GNU zip), ein beliebtes Unix / Linux-Komprimierungsformat. Ebenso .bz2
steht das für bzip2, ein neueres Komprimierungsformat, das eine höhere Komprimierung (kleinere komprimierte Dateigröße) als gzip bietet.
Nachdem Sie die Quelldatei heruntergeladen haben, öffnen Sie ein Terminalfenster (System Terminal aus dem Ubuntu-Menü) und wechseln Sie in das Verzeichnis, in dem Sie Ihre Datei gespeichert haben. ( ~/download
In diesem Beispiel verwende ich . Hier ist '~' eine Verknüpfung zu Ihrem "Home" -Verzeichnis.) Verwenden Sie den Befehl tar, um die Dateien aus der heruntergeladenen Archivdatei zu extrahieren:
Wenn Ihre Datei ein gzip-Archiv ist (zB endet mit .tar.gz
), verwenden Sie den Befehl:
$ tar -zxvf filename.tar.gz
Wenn Ihre Datei ein bzip2-Archiv ist (zB endet mit .tar.bz2
), verwenden Sie den Befehl:
$ tar -jxvf filename.tar.gz
Tipp: Wenn Sie sich nicht alle Befehlszeilenoptionen merken müssen, um Archive zu extrahieren, empfehle ich eines (oder beide) dieser Dienstprogramme: dtrx (mein Favorit!) Oder deco (populärer). Mit einem dieser Dienstprogramme geben Sie einfach den Namen des Dienstprogramms (dtrx oder deco) und den Dateinamen ein, den Rest erledigt es. Beide "wissen", wie sie mit den meisten Archivformaten umgehen können, auf die Sie wahrscheinlich stoßen, und sie haben eine hervorragende Fehlerbehandlung.
Beim Erstellen aus dem Quellcode treten wahrscheinlich zwei häufig auftretende Fehlertypen auf:
- Konfigurationsfehler treten auf, wenn Sie das Konfigurationsskript (normalerweise config oder configure) ausführen, um ein für Ihr Setup spezifisches Makefile zu erstellen.
- Compilerfehler treten auf, wenn Sie den Befehl make ausführen (nachdem das Makefile generiert wurde) und der Compiler nicht den Code findet, den er benötigt.
Wir werden uns jedes dieser Probleme ansehen und besprechen, wie es gelöst werden kann.
Konfiguration und Konfigurationsfehler
Nachdem Sie die Quellcode-Archivdatei extrahiert haben, sollten Sie im Terminal in das Verzeichnis wechseln, das die extrahierten Dateien enthält. In der Regel entspricht dieser Verzeichnisname dem Namen der Datei (ohne die Erweiterung .tar.gz
oder .tar.bz2
). Manchmal ist der Verzeichnisname jedoch nur der Name der Anwendung ohne Versionsinformationen.
Suchen Sie im Quellverzeichnis nach einer README
Datei und / oder einer INSTALL
Datei (oder etwas mit ähnlichen Namen). Diese Dateien enthalten in der Regel nützliche Informationen zum Erstellen / Kompilieren und Installieren der Anwendung, einschließlich Informationen zu Abhängigkeiten. "Abhängigkeiten" sind nur ein ausgefallener Name für andere Komponenten oder Bibliotheken, die für eine erfolgreiche Kompilierung erforderlich sind.
Nachdem Sie die Datei README
und / oder gelesen haben INSTALL
(und hoffentlich eine relevante Online-Dokumentation für die Anwendung gelesen haben ), suchen Sie nach einer ausführbaren Datei mit dem Namen config
oder configure
. Manchmal hat die Datei eine Erweiterung, wie .sh
zB config.sh
. Dies ist normalerweise ein Shell-Skript, das einige andere Dienstprogramme ausführt, um zu bestätigen, dass Sie eine "vernünftige" Umgebung zum Kompilieren haben. Mit anderen Worten, es wird überprüft, ob alles installiert ist, was Sie benötigen.
Tipp: Wenn es sich um eine Python-basierte Anwendung handelt, sollten Sie anstelle einer Konfigurationsdatei eine Datei mit dem Namen suchen setup.py
. Python-Anwendungen sind normalerweise sehr einfach zu installieren. Um diese Anwendung als root zu installieren (z. B. setzen Sie sudo unter Ubuntu vor den folgenden Befehl), führen Sie diesen Befehl aus:
$ python setup.py install
Das sollte alles sein, was Sie tun müssen. Sie können den Rest dieses Lernprogramms überspringen und direkt mit der Verwendung und Verwendung Ihrer Anwendung fortfahren.
Führen Sie das Konfigurationsskript im Terminal aus. Normalerweise können (und sollten) Sie Ihr Konfigurationsskript mit Ihrem regulären Benutzerkonto ausführen.
$ ./config
Das Skript zeigt einige Meldungen an, um Ihnen eine Vorstellung davon zu geben, was es tut. Häufig gibt Ihnen das Skript einen Hinweis darauf, ob es erfolgreich war oder fehlgeschlagen ist, und, falls es fehlgeschlagen ist, einige Informationen zur Ursache des Fehlers. Wenn Sie keine Fehlermeldungen erhalten, können Sie normalerweise davon ausgehen, dass alles in Ordnung ist.
Wenn Sie kein Skript finden, das wie ein Konfigurationsskript aussieht, bedeutet dies in der Regel, dass die Anwendung sehr einfach und plattformunabhängig ist. Dies bedeutet, dass Sie einfach mit dem folgenden Schritt zum Erstellen / Kompilieren fortfahren können, da das bereitgestellte Makefile
auf jedem System funktionieren sollte.
Ein Beispiel
In diesem Tutorial verwende ich den textbasierten RSS-Reader Newsbeuter als Beispiel für die Arten von Fehlern, die beim Erstellen Ihrer Anwendung auftreten können. Für Newsbeuter lautet der Name des Konfigurationsskripts config.sh
. Auf meinem System treten beim Ausführen config.sh
die folgenden Fehler auf:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
Nach einigen Recherchen stellte ich fest, dass die sqlite3
Anwendung tatsächlich installiert war. Da ich jedoch versuche, aus dem Quellcode zu erstellen, ist dies ein Tipp, nach dem config.sh
eigentlich die Entwicklungsbibliotheken (Header) suchen sqlite3
. In Ubuntu haben die meisten Pakete ein zugehöriges Entwicklungs-Gegenstück-Paket, das auf endet -dev
. (Andere Plattformen wie Fedora verwenden häufig ein Paketsuffix -devel
für die Entwicklungspakete.)
Um das passende Paket für das sqlite3
Entwicklungspaket zu finden , können wir das apt-cache
Hilfsprogramm in Ubuntu (und ähnlich das yum
Hilfsprogramm in Fedora) verwenden:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
Dieser Befehl gibt eine ziemlich große Liste von Ergebnissen zurück, daher müssen wir ein wenig Detektivarbeit leisten, um das geeignete Paket zu ermitteln. In diesem Fall stellt sich das entsprechende Paket heraus libsqlite3-dev
. Beachten Sie, dass das gesuchte Paket manchmal das lib
Präfix anstelle des gleichen Paketnamens plus hat -dev
. Dies liegt daran, dass wir manchmal nur nach einer gemeinsam genutzten Bibliothek suchen, die von vielen verschiedenen Anwendungen verwendet werden kann. libsqlite3-dev
Führen Sie zum Installieren den typischen Befehl apt-get install im Terminal aus:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
Jetzt müssen wir config.sh
erneut ausführen , um sicherzustellen, dass wir dieses Abhängigkeitsproblem gelöst haben und keine Abhängigkeitsprobleme mehr haben. (Während ich es hier nicht zeige, musste ich im Falle von Newsbeuter auch das libcurl4-openssl-dev
Paket installieren .) Auch wenn Sie ein Entwicklungspaket (wie libsqlite3-dev
) installieren und das zugehörige Anwendungspaket (zB sqlite3
) nicht Bereits installiert, installieren die meisten Systeme gleichzeitig automatisch das zugehörige Anwendungspaket.
Wenn die Konfiguration erfolgreich ausgeführt wird, werden eine oder mehrere Make-Dateien erstellt. Diese Dateien haben normalerweise einen Namen Makefile
(denken Sie daran, dass bei Unix / Linux die Groß- und Kleinschreibung des Dateinamens eine Rolle spielt!). Wenn das Erstellungspaket Unterverzeichnisse wie z. B. src
usw. enthält, enthält jedes dieser Unterverzeichnisse Makefile
auch ein.
Fehler beim Erstellen und Kompilieren
Jetzt können wir die Anwendung tatsächlich kompilieren. Dies wird oft als Gebäude bezeichnet und der Name ist dem realen Konstruktionsprozess entlehnt. Die verschiedenen "Teile" der Anwendung, bei denen es sich normalerweise um mehrere Quellcodedateien handelt, werden zu einer Gesamtanwendung zusammengefasst. Das Dienstprogramm make verwaltet den Erstellungsprozess und ruft andere Anwendungen wie den Compiler und den Linker auf, um die Arbeit tatsächlich auszuführen. In den meisten Fällen führen Sie make einfach (mit Ihrem regulären Benutzerkonto) aus dem Verzeichnis aus, in dem Sie die Konfiguration ausgeführt haben. (In einigen Fällen, z. B. beim Kompilieren von Anwendungen, die mit der Qt-Bibliothek geschrieben wurden, müssen Sie stattdessen eine andere "Wrapper" -Anwendung wie qmake ausführen. Überprüfen Sie auch hier immer die README
und / oder INSTALL
Dokumente auf Details.)
Wie im obigen Konfigurationsskript werden beim Ausführen von make (oder einem ähnlichen Dienstprogramm) im Terminal einige Meldungen zur Ausführung sowie etwaige Warnungen und Fehler angezeigt. Sie können Warnungen in der Regel ignorieren, da sie hauptsächlich für die Entwickler der Anwendung bestimmt sind und ihnen mitteilen, dass gegen einige Standardverfahren verstoßen wird. Normalerweise haben diese Warnungen keinen Einfluss auf die Anwendungsfunktion. Auf der anderen Seite müssen Compilerfehler behoben werden. Als ich mit Newsbeuter make lief, lief es eine Weile gut, aber dann bekam ich einen Fehler:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
Der make-Vorgang wird abgebrochen, sobald der erste Fehler auftritt. Der Umgang mit Compilerfehlern kann manchmal schwierig sein. Sie müssen sich die Fehler ansehen, um Hinweise auf das Problem zu erhalten. In der Regel besteht das Problem darin, dass einige Headerdateien, die normalerweise die Erweiterung .h
oder haben .hpp
, fehlen. Im Falle des obigen Fehlers ist (oder sollte!) Klar, dass das Problem darin besteht, dass die stfl.h
Header-Datei nicht gefunden werden kann. Wie dieses Beispiel zeigt, sollten Sie sich die ersten Zeilen der Fehlermeldung ansehen und nach unten arbeiten, um die zugrunde liegende Ursache des Problems zu finden.
Nachdem ich mir die Newsbeuter-Dokumentation angesehen hatte (was ich hätte tun sollen, bevor ich anfing, aber dann wäre dieser Teil des Tutorials nicht sehr aussagekräftig!), Stellte ich fest, dass eine Drittanbieter-Bibliothek namens STFL erforderlich ist. Was machen wir also in diesem Fall? Nun, wir wiederholen im Wesentlichen denselben Vorgang für die erforderliche Bibliothek: Besorgen Sie sich die Bibliothek und führen Sie den Configure-Build-Install-Vorgang für sie aus und setzen Sie dann die Erstellung der gewünschten Anwendung fort. Im Fall von STFL musste ich beispielsweise das libncursesw5-dev
Paket installieren , damit es ordnungsgemäß erstellt wurde. (Normalerweise ist es nicht erforderlich, den Konfigurationsschritt für unsere ursprüngliche Anwendung nach der Installation einer anderen erforderlichen Anwendung erneut durchzuführen, aber es kann auch nie schaden.)
Nach der erfolgreichen Installation des STFL-Toolkits wurde der Make-Prozess für Newsbeuter erfolgreich ausgeführt. Der make-Prozess setzt normalerweise dort an, wo er aufhört (zum Zeitpunkt des Fehlers). Dateien, die bereits erfolgreich kompiliert wurden, werden daher nicht erneut kompiliert. Wenn Sie alles neu kompilieren möchten, können Sie make clean all ausführen, um alle kompilierten Objekte zu entfernen, und make erneut ausführen.
Installieren
Nachdem der Erstellungsprozess erfolgreich abgeschlossen wurde, können Sie die Anwendung installieren. In den meisten Fällen müssen Sie die Installation als Root ausführen , um die Anwendung in den allgemeinen Bereichen des Dateisystems (z. B. /usr/bin
oder /usr/share/bin
usw.) zu installieren. Die Installation ist wirklich der einfachste Schritt im gesamten Prozess. So installieren Sie im Terminal:
$ make install
Überprüfen Sie die Ausgabe dieses Prozesses auf Fehler. Wenn alles erfolgreich war, sollten Sie in der Lage sein, den Befehlsnamen im Terminal auszuführen, und es wird gestartet. (Fügen Sie & an das Ende der Befehlszeile an, wenn es sich um eine GUI-Anwendung handelt oder Sie die Terminalsitzung erst verwenden können, wenn die Ausführung der Anwendung abgeschlossen ist.)
Wenn Sie eine Anwendung aus dem Quellcode erstellen, wird den GUI-Menüs in Ubuntu normalerweise kein Symbol oder keine Verknüpfung hinzugefügt. Sie müssen dies manuell hinzufügen.
Und das ist im Grunde der Prozess, wenn auch möglicherweise iterativ, um eine Anwendung aus dem Quellcode in Ubuntu zu erstellen und zu installieren. Nachdem Sie dies nur ein paar Mal getan haben, wird es für Sie zur zweiten Natur!