{"id":1001,"date":"2023-09-03T20:26:14","date_gmt":"2023-09-03T18:26:14","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=1001"},"modified":"2023-09-03T20:26:15","modified_gmt":"2023-09-03T18:26:15","slug":"software-unter-linux-selbst-kompilieren","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2023\/09\/03\/software-unter-linux-selbst-kompilieren\/","title":{"rendered":"Software unter Linux selbst kompilieren"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Grunds\u00e4tzlich installiert man sich Software unter Linux \u00fcber die\u00a0Paket-Verwaltung\u00a0&#8211; hier unter auf Debian basierenden Linux-Distributionen beschrieben. Funktioniert am einfachsten, hinzu kommen aber nat\u00fcrlich auch noch die\u00a0<a href=\"https:\/\/linux-bibel.at\/index.php\/2023\/09\/03\/flatpak-pakete-nutzen-noch-mehr-software\/\" data-type=\"post\" data-id=\"746\" target=\"_blank\" rel=\"noreferrer noopener\">Flatpaks<\/a>,\u00a0<a href=\"https:\/\/linux-bibel.at\/index.php\/2023\/09\/03\/snap-noch-mehr-software-unter-linux\/\" data-type=\"post\" data-id=\"802\">Snaps<\/a>\u00a0und\u00a0Appimages.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entwickler schreiben jedoch ihre Software im Quellcode &#8211; dies sind einfache Textdateien, k\u00f6nnte etwa so aussehen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-1024x576.jpg\" alt=\"\" class=\"wp-image-1002\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Solchen Quellcode findet man h\u00e4ufig auf GitHub und GitLab. Hat der Entwickler zu wenig Zeit und findet sich auch kein anderer, der den Quellcode zu einem funktionierenden Programm packt &#8211; bleibt einem nichts anderes \u00fcbrig, als den Quellcode selbst zu kompilieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kompilieren nennt man nun das \u00dcbersetzen des Quellcodes, also der Textdateien in eine funktionierende Software. Dies ist gar nicht einmal so schwierig, man muss sich nur ein wenig damit befassen. Und wenn man wirklich auf Software angewiesen ist &#8211; hier finden Sie einen Leitfaden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C-Programme selbst kompilieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die meisten Anwendungen lassen sich ganz einfach kompilieren, in diesem Beitrag geht es um die wohl meist genutzten &#8211; also Anwendungen mittels C und \u00e4hnlicher Sprachen geschriebener Software. KDE-Anwendungen, basierend auf Qt geh\u00f6ren hier nicht dazu &#8211; diese sehen wir uns sp\u00e4ter an.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als Erstes gilt es einige Voraussetzungen zu schaffen &#8211; hierzu installiert man sich unter auf Debian basierenden Linux-Distributionen \u00fcber die Paket-Verwaltung das Paket &#8222;<strong>build-essential<\/strong>&#8222;. Also etwa als\u00a0Administrator\u00a0am\u00a0Terminal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install build-essential<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das w\u00e4ren die Grundvoraussetzungen, wahrscheinlich gilt es sp\u00e4ter weitere Pakete zu installieren &#8211; die Abh\u00e4ngigkeiten der zu kompilierenden Software. Erst gilt es das heruntergeladene komprimierte Archiv zu entpacken, anschlie\u00dfend wechselt man in das entpackte Verzeichnis. Hier finden sich dann mehrere Dateien und Verzeichnisse. Zu Beginn sollte man sich Dateien wie &#8222;<strong>README<\/strong>&#8220; und &#8222;<strong>HELP<\/strong>&#8220; ansehen &#8211; hier ein kleines Beispiel:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-1-1024x576.jpg\" alt=\"\" class=\"wp-image-1003\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-1-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-1-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-1-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-1-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-1.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Dateien beinhalten Hilfen, Anweisungen und auch die zu installierenden Abh\u00e4ngigkeiten. Auf GitHub und GitLab finden sich zu den Anweisungen zur Installation auch die Abh\u00e4ngigkeiten. Dann geht es ab auf das Terminal &#8211; hier beginnt man als normaler Benutzer mit dem Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/configure --help<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Befehl vermittelt uns zus\u00e4tzliche Hilfen, zeigt uns etwa hilfreiche Optionen &#8211; gr\u00f6\u00dftenteils sind solche jedoch nicht n\u00f6tig. Weiter geht es ebenfalls als normaler Benutzer mit dem Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/configure<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Erhalten Sie bei diesen Befehlen bereits eine Fehlermeldung, findet sich im Verzeichnis wahrscheinlich eine Datei namens &#8222;<strong>autogen.sh<\/strong>&#8220; &#8211; in diesem Fall starten Sie folgenden Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/autogen.sh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Beide Befehle kontrollieren, ob alle Voraussetzungen geschaffen wurden, also etwa alle ben\u00f6tigten Abh\u00e4ngigkeiten installiert sind. Hier kann es jetzt schon zu, m\u00f6glichen Fehlermeldungen kommen &#8211; dass etwa Software angezeigt wird, die nicht installiert ist. Meist handelt es sich um Entwickler-Pakete, die Sie einfach \u00fcber die Paket-Verwaltung installieren. Werden solche Fehlermeldungen angezeigt &#8211; installieren Sie diese Pakete und starten den Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/configure<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">erneut. Sobald der Befehl ohne Fehler durchgelaufen ist, starten Sie wieder als normaler Benutzer den Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>make<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Befehl kann nun etwas l\u00e4nger dauern, bis er durchgelaufen ist &#8211; hierbei wird aus dem Quellcode, also aus den Textdateien ein funktionierendes Programm erstellt. Die Software wird aus dem Quelltext \u00fcbersetzt. Auch hier k\u00f6nnte es wieder zu Fehlermeldungen kommen &#8211; etwa weil der Entwickler vergessen hat, bestimmte Abh\u00e4ngigkeiten in das Configure-Skript einzutragen. Auch hier erhalten Sie wieder entsprechende Meldungen. Wie Sie entsprechende Dateien finden, lesen Sie im folgenden Beitrag. Installieren Sie also die ben\u00f6tigten Abh\u00e4ngigkeiten und starten folgende beiden Befehle:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>make clean\nmake<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dies kann bei vielen Fehlern etwas aufreibend sein &#8211; der Befehl liefert der Reihe nach immer nur eine fehlende Abh\u00e4ngigkeit. Ist der &#8222;<strong><code>make<\/code><\/strong>&#8222;-Befehl erfolgreich durchgelaufen, wurde der Quelltext \u00fcbersetzt und die Anwendung kann jetzt als Administrator installiert werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>make install<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Entwicklerpakete unter auf Debian basierenden Linux-Distributionen finden<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die Befehle &#8222;<strong>configure<\/strong>&#8220; und &#8222;<strong>make<\/strong>&#8220; liefern oft nur Dateinamen &#8211; der Grund, nicht auf allen Distributionen nennen sich Pakete mit entsprechenden Dateien gleich. Man macht sich also \u00fcber die Paket-Verwaltung auf, nach entsprechenden Dateien zu suchen. Schneller zum Ziel f\u00fchrt das Paket &#8222;<strong>apt-file<\/strong>&#8222;. Der gleichnamige Befehl durchsucht installierte und nicht installierte Pakete nach dem von Ihnen gew\u00fcnschten Begriff. Zu Beginn aktualisiert man die Datenbank der Software (<em>als Administrator<\/em>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-file update<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sucht man etwa nach dem Begriff &#8222;<strong>dev<\/strong>&#8222;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-file -l find libxtst | grep dev<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-2-1024x576.jpg\" alt=\"\" class=\"wp-image-1004\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-2-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-2-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-2-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-2-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-2.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Im Beispiel wird die Ausgabe &#8222;<strong>libxtst-dev<\/strong>&#8220; angezeigt, dieses Paket ist zu installieren. Die Option &#8222;<strong><code>-l<\/code><\/strong>&#8220; wird vor allem bei Bibliotheken genutzt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mit Checkinstall Debian-Pakete beim Kompilieren erstellen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Installiert man via Kompilieren unter Linux Software, wei\u00df die Paket-Verwaltung nichts \u00fcber die installierte Software &#8211; kompilierte Software gilt es \u00fcber entsprechende Anweisungen (<em>im Verzeichnis des Quellcodes<\/em>) wieder zu entfernen, wenn man dies m\u00f6chte. Dies ist nat\u00fcrlich etwas umst\u00e4ndlich. Warum nicht gleich beim Kompilieren ein Debian-Paket erstellen, dieses l\u00e4sst sich \u00fcber die Paket-Verwaltung installieren und auch wieder deinstallieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sie installieren die Software unter auf Debian basierenden Linux-Distributionen ganz einfach \u00fcber die Paket-Verwaltung durch das Paket &#8222;<strong>checkinstall<\/strong>&#8222;. Checkinstall wird ganz einfach genutzt &#8211; statt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>make install<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">nutzen Sie beim Kompilieren den Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>checkinstall<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Anschlie\u00dfend k\u00f6nnen Sie entsprechende Angaben machen &#8211; in der Regel gen\u00fcgt es aber ganz einfach mit der\u00a0<strong><kbd>Eingabe<\/kbd><\/strong>-Taste zu best\u00e4tigen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qt-Programme unter Linux kompilieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Qt-Programme werden zumeist unter KDE Plasma genutzt. Hierzu brauchen Sie einen speziellen Compiler &#8211; dieser nennt sich &#8222;<strong>Qmake<\/strong>&#8222;. Unter auf Debian basierenden Linux-Distributionen installieren Sie diesen \u00fcber die Paket-Verwaltung durch das Paket &#8222;<strong>cmake<\/strong>&#8222;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Auch bei Qt-Anwendungen gilt es zu Beginn auf die &#8222;<strong>README<\/strong>&#8222;- und &#8222;<strong>HELP<\/strong>&#8222;-Dateien zu achten &#8211; sie beinhalten entsprechende Anweisungen und eben auch Abh\u00e4ngigkeiten. Diese gilt es zu befolgen und Abh\u00e4ngigkeiten zu installieren.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-3-1024x576.jpg\" alt=\"\" class=\"wp-image-1005\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-3-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-3-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-3-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-3-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/kompilieren-3.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Meist gilt es das Terminal im entpackten Verzeichnis zu \u00f6ffnen, anschlie\u00dfend erstellen Sie das Verzeichnis &#8222;<em>build<\/em>&#8220; als normaler Benutzer und wechseln in dieses Verzeichnis:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir build\ncd build\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt gilt es, die Software zu kompilieren &#8211; als normaler Benutzer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cmake ..<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je nach Anwendung kann der Befehl auch anders lauten &#8211; wie schon beschrieben, lesen Sie die genannten Dateien. Auch hier kann es zu Fehlermeldungen kommen &#8211; in diesem Fall bricht der Befehl mit entsprechenden Meldungen ab, installieren Sie die Abh\u00e4ngigkeiten und starten den Befehl erneut.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sie erhalten bei erfolgreichem Durchlauf des Befehls entsprechende ausf\u00fchrbare Dateien, diese k\u00f6nnen Sie direkt per Mausklick starten oder etwa als Administrator in entsprechende Systemverzeichnisse verschieben.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Grunds\u00e4tzlich installiert man sich Software unter Linux \u00fcber die\u00a0Paket-Verwaltung\u00a0&#8211; hier unter auf Debian basierenden Linux-Distributionen beschrieben. Funktioniert am einfachsten, hinzu kommen aber nat\u00fcrlich auch noch die\u00a0Flatpaks,\u00a0Snaps\u00a0und\u00a0Appimages. Entwickler schreiben jedoch ihre Software im Quellcode &#8211; dies sind einfache Textdateien, k\u00f6nnte etwa so aussehen: Solchen Quellcode findet man h\u00e4ufig auf GitHub und GitLab. Hat der Entwickler zu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1003,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[64],"tags":[65],"class_list":["post-1001","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-verwalten","tag-software-verwalten"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/1001","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=1001"}],"version-history":[{"count":1,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/1001\/revisions"}],"predecessor-version":[{"id":1006,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/1001\/revisions\/1006"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/1003"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=1001"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=1001"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=1001"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}