Dennis_B: Linux: Programme Kompilieren?

Hallo Welt :)

ich spiele seit einigen Tagen mit Linux (Knoppix) rum und komme nun zum Kapitel wo man ein Paket aus dem Internet lädt, dieses Kompilieren muss damit es installiert werden kann (SourceCode?).

Ich habe mich nun mein erstes mal daran getraut und -wie ich mir schon dachte- absolut gescheitert.

Aus dem Internet habe ich mir dieses Snake-Spiel namens cNibbles besorgt, es liegt im Format .tbz vor.

Nun bin ich ab auf die Konsole und habe es mittels:

dennis@Microknoppix:~/Desktop$ tar -xjf cNibbles-2.0.1.tbz

entpackt und mir den Ordner angeschaut.

Die Datei README habe ich mit:

knoppix@Microknoppix:~/Desktop$ cat README

angeschaut.

Dort steht nun (ausschnitt):

To compile type make.
To install type make install.

Edit the Makefile if you have your libraries in strange places.
You will need the curses library to compile this.
The prefered compiler is gcc 3.x

Okay, so wie ich das nun verstanden habe wird gcc (Compiler) gebraucht das ich auch auf dem System habe.

Also habe ich nun make eingegeben und bekam eine menge Fehlermeldungen die ich nicht verstehe.

Bevor ich mich nochmals an so was heranwage muss ich bestimmt noch einiges Lernen, aber was? Wo soll ich anfangen und was sind die Grundlagen zum Kompilieren und Installieren von Software unter Linux?

Ich will es Lernen auch wenn man manchmal am liebsten aufgeben will und den ganzen kram in die ecke werfen möchte.

Doch es macht einfach Mega-Spaß in eine "neue" Welt einzutauchen, was neues Lernen. Mensch, ich verbringe 95% in der Konsole und wenn man begriffen hat was man alles ohne GUI machen kann kommt man aus dem staunen nicht mehr heraus. Alles ist irgendwie bodenständiger, wichtiger und einfach "mehr" also nur einfach wie doof mit der Maus rumzuklicken. Zudem habe ich das gefühl das die Konsole tausenmal effektiver ist wie die Konsole.. aber naja ist halt mein Gefühl :)

So, nun höre ich auf mit meiner Träumerei und freue mich auf eure Hilfe :)

lg Dennisderkeinfussballguckentutweilinuxvielspannenderist :)

  1. Hallo, Dennis!

    Ich hoffe, Dein Englisch reicht aus, um den vor 4 Jahren von mir verfassten Errors Hint zu verstehen.

    Ein zusätzlicher Hinweis, der für LFS natürlich nicht zutrifft: Grundsätzlich ist es so, dass auf Distributionen solche Pakete, die man zum Verlinken benötigt (-dev-Pakete) nicht standardmäßig installiert sind. Die Anforderung ncurses ist demnach nicht allein mit dem Paket ncurses, sondern erst mit dem zusätzlichen Paket ncurses-dev erfüllt.

    Ansonsten funktioniert bei den meisten (wenn auch nicht bei allen) GNU-Paketen ein einfaches cmmi (configure && make && make install).

    Gruß, LX
    P.S.: wenn Du mehr über Linux lernen willst, empfehle ich LinuxFromScratch, das hat mir damals so extrem geholfen, dass ich sogar den oben stehenden Hint (und einige weitere Anleitungen) verfassen konnte.

    --
    RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
    1. P.S.: wenn Du mehr über Linux lernen willst, empfehle ich LinuxFromScratch

      Nichts gegen LFS, aber wenn jemand noch nicht einmal so weit ist, ein kleines, fertiges Programm zu übersetzt bekommen, dann ist LFS ein wenig zu viel des Guten.

      1. Aber ganz im Gegenteil: Wenn Du willst, dass jemand schwimmen lernt, solltest Du ihn nicht vom Wasser fernhalten ;-)

        Gruß, LX

        --
        RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
  2. Hi!

    Also habe ich nun make eingegeben und bekam eine menge Fehlermeldungen die ich nicht verstehe.

    Nicht immer sind das Fehlermeldungen. Die meiste Zeit brabbelt das make vor sich hin, was es gerade macht und der Compiler beklagt sich gelegentlich mit ein paar Warnungen, die man als Endanwender sowieso nur ignorieren kann.

    Wenn doch ein Fehler auftritt, ist man in den meisten Fällen nicht der erste, der darüber stolpert. Also ist die Chance, dass dazu schon jemand was gefragt hat, recht hoch, so dass eine Suche nach relevanten Textstellen der Fehlermeldung oftmals Hinweise ergibt.

    Bevor ich mich nochmals an so was heranwage muss ich bestimmt noch einiges Lernen, aber was? Wo soll ich anfangen und was sind die Grundlagen zum Kompilieren und Installieren von Software unter Linux?

    Das brauchst du in der Tiefe nur, wenn du selbst programmieren willst. Als Anwender, der sich mal ein Programm, auch auch den Quellen, installieren will, ist üblicherweise alles oder recht viel vorbereitet, so dass man meist nur mit configure und make in Berührung kommt. Wichtig ist, dass bei Abhängigkeiten von anderen Paketen, diese zuerst installiert werden müssen. Eine Paketverwaltung, wie sie in jeder Distribution enthalten ist (/sein sollte) kümmert sich darum. Wenn diese dein Paket enthält, solltest du damit installieren. Wenn nicht, dann gemäß der Doku der zu installierenden Software die Abhängigkeiten lösen, wozu wieder die Paketverwaltung hilfreich sein kann. Lerne zunächst, mit ihr umzugehen: Wie installiert man was? Wie schaut man nach, was schon installiert ist? Wie sucht man nach Paketen?

    Ich will es Lernen auch wenn man manchmal am liebsten aufgeben will und den ganzen kram in die ecke werfen möchte.

    Scheitern. Wieder scheitern. Besser scheitern.

    So, nun höre ich auf mit meiner Träumerei und freue mich auf eure Hilfe :)

    Naja, auf ein allgemeines "Frustposting" kann man nicht allzu viel Konkretes antworten.

    Lo!

  3. Hi Dennis_B!

    Okay, so wie ich das nun verstanden habe wird gcc (Compiler) gebraucht das ich auch auf dem System habe.

    Also habe ich nun make eingegeben und bekam eine menge Fehlermeldungen die ich nicht verstehe.

    Die wären hier interessant gewesen.

    Bevor ich mich nochmals an so was heranwage muss ich bestimmt noch einiges Lernen, aber was? Wo soll ich anfangen und was sind die Grundlagen zum Kompilieren und Installieren von Software unter Linux?

    Die Fehlermeldung(en) posten. Blind würde ich sagen, Du machst erstmal folgendes:

    apt-get install build-essential

    mfG
    Benjamin

    --
    For animals, the entire universe has been neatly divided into things to (a) mate with, (b) eat, (c) run away from, and (d) rocks.
    1. Hey Benjamin,

      Die wären hier interessant gewesen.

      stimmt, sorry. Bin gerade wieder unter Windows und kann die Ausgabe leider nicht Posten.

      apt-get install build-essential

      Okay, ich kann es eingeben aber was hat das zu bedeuten?
      Und wieso wird manchmal gesagt eine ./configure, make , make install?
      Z.b. gibt´s bei dieser Software* keine Datei/Script namens ./configure sondern ich soll nur make und install eingeben. Es befindet sich im Programmordner aber wiederum eine Datei namens Makefile was mich noch mehr verwirrt...

      Was aber make und install bedeutet kann ich mir denken, make "Compiliert" und "install" installiert die Software/Programme (befehle die Global zur verfügung stehen).

      Nur, woher weiß make was es machen soll? Ich befinde mich zwar in dem Ordner des Programms aber ich gebe ja überhaupt keine Parameter oder Quellcode/Datei an!?!

      Und wenn es installiert ist, wo? /usr/bin? Kann man das irgendwo nachschauen wo es gelandet ist? Wenn ich etwas über die Paketverwaltung installiere schaue ich nach indem ich die installierte Anwendung in der Paketverwaltung anklicke und auf Eigenschaften gehe. Da erscheint dann eine Liste wo überall was gelandet ist. Ist das auch in der Konsole möglich?

      Danke euch vielmals!

      *cNibbles

      1. apt-get install build-essential
        Okay, ich kann es eingeben aber was hat das zu bedeuten?

        "Hole die Sachen, die für das Bauen von Software dringend benötigt werden".

        Und wieso wird manchmal gesagt eine ./configure, make , make install?

        Weil sich sehr viele Programme so übersetzen lassen - wenn auch nicht alle. Es gibt noch andere Build-Systeme als nur "make; make install", etwa scons, ant, usw.

        Es befindet sich im Programmordner aber wiederum eine Datei namens Makefile was mich noch mehr verwirrt...

        Makefile ist die Datei, nach der "make" standardmäßig sucht. Die Syntax entspricht in etwa der eines Shell-Skriptes mit kleineren Erweiterungen.

        Nur, woher weiß make was es machen soll? Ich befinde mich zwar in dem Ordner des Programms aber ich gebe ja überhaupt keine Parameter oder Quellcode/Datei an!?!

        Das steht alles in der Makefile.

        Und wenn es installiert ist, wo? /usr/bin? Kann man das irgendwo nachschauen wo es gelandet ist?

        mit "make -n install" kannst Du alle Befehle austesten, ohne dass etwas passiert. Schaue insbesondere nach cp- und install-Anweisungen, da siehst Du, wohin die Dateien geschoben werden.

        Gruß, LX

        --
        RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
      2. Hallo,

        apt-get install build-essential
        Okay, ich kann es eingeben aber was hat das zu bedeuten?

        "Lieber Paketmanager, installiere mir das Paket build-essential."
        Dieses Paket enthält vermutlich Hilfsprogramme und/oder Bibliotheken, die beim Compilieren eigener Anwendungen oft gebraucht werden.

        Und wieso wird manchmal gesagt eine ./configure, make, make install?

        Weil die im Quellcode vorliegende Software häufig noch angepasst werden kann/muss - zum Beispiel an bestimmte Hardware-Eigenschaften, oder an bestimmte Vorlieben des Anwenders, die gleich fest eincompiliert werden.

        Z.b. gibt´s bei dieser Software* keine Datei/Script namens ./configure sondern ich soll nur make und install eingeben.

        Dann solltest du konkreter werden, damit man dir weiterhelfen kann.

        Es befindet sich im Programmordner aber wiederum eine Datei namens Makefile was mich noch mehr verwirrt...

        Diese Datei wird von make automatisch verwendet (Default). Sie enthält sozusagen den Bauplan, also die Anweisung, welche Quellcodes wie und in welcher Reihenfolge zu übersetzen und zu linken sind, damit das fertige Produkt entsteht.

        Nur, woher weiß make was es machen soll?

        Die Frage dürfte damit beantwortet sein. ;-)

        Ciao,
         Martin

        --
        Time's an illusion. Lunchtime doubly so.
          (Douglas Adams, "The Hitchhiker's Guide To The Galaxy")
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallo Martin && LX,

          "Lieber Paketmanager, installiere mir das Paket build-essential."
          Dieses Paket enthält vermutlich Hilfsprogramme und/oder Bibliotheken, die beim Compilieren eigener Anwendungen oft gebraucht werden.

          alles klar, begriffen!

          Und wieso wird manchmal gesagt eine ./configure, make, make install?

          Weil die im Quellcode vorliegende Software häufig noch angepasst werden kann/muss - zum Beispiel an bestimmte Hardware-Eigenschaften, oder an bestimmte Vorlieben des Anwenders, die gleich fest eincompiliert werden.

          Ahhhh... okay, als ich in diesem (siehe ersten Thread Kurs war sollten wir einen Apache Webserver aufsetzen, da sollten wir auch die Datei bearbeiten und Änderungen vornehmen. Jetzt kapiere ich den Zusammenhang, kleine Programme die nicht weiter angepasst werden müssen (oder eine Anpassung überhaupt sinnlos wäre) hat diese Datei nicht. Okay.

          Diese Datei wird von make automatisch verwendet (Default). Sie enthält sozusagen den Bauplan, also die Anweisung, welche Quellcodes wie und in welcher Reihenfolge zu übersetzen und zu linken sind, damit das fertige Produkt entsteht.

          Roger, okay jetzt wird mir die ganze Sache klarer. Wieso wurde uns sowas in diesen richtig teuren Kurs nicht beigebracht ??? Man, wie gut das es das Forum und Leute gibt die einem Helfen! Danke!

          Lg Dennis