C-Programmierwerkzeuge unter Linux



  • Hallo Com.
    Im Oktober fängt mein Studium für Informatik an und möchte mich in den Sommerferien ein bisschen aufs Studium vorbereiten. Die Programmiersprache ist C unter Linux. Als Programmierwerkzeug verwenden die Professoren keine IDE, sondern alles separat. Ich kenne mich leider mit Linux gar nicht aus und weiß nicht, was ich nehmen soll.
    Was ich brauche:
    - eventuell gutes Lernmaterial (kein C-Buch, da hab ich schon eins, sondern Buch für Linux-Programmierung)
    - welches Linux-Derivat schlägt ihr mir vor
    - Compiler (nehme wahrscheinlich gcc)
    - Linker
    - guten Texteditor mit Syntaxhighlighting
    - debugger
    - Makefile Programm
    -... und das, was ihr mir noch vorschlagen würdet. 😉

    Vielen Dank schonmal und schönen Tag


  • Mod

    neuer User schrieb:

    - eventuell gutes Lernmaterial (kein C-Buch, da hab ich schon eins, sondern Buch für Linux-Programmierung)

    Ist das C-Buch auch gut? Es gibt leider viel Mist auf dem Markt.

    Für Systemprogrammierung wirst du kein Buch brauchen, Manpages/Google sollten mehr als ausreichend sein. Es würde mich auch wundern, wenn der Kurs da wirklich in die Tiefe geht. Wenn ihr ein C-Buch braucht, dann wird wohl hauptsächlich C selber das Thema sein und damit seid ihr das ganze Semester lang beschäftigt.

    - welches Linux-Derivat schlägt ihr mir vor

    Vollkommen egal, was dir am besten gefällt.

    - Compiler (nehme wahrscheinlich gcc)

    Ja, GCC ist praktisch der Standardcompiler.

    - Linker

    Ebenfalls den Standardlinker ld. Wirst du normalerweise nie direkt aufrufen, sondern immer nur über GCC.

    - guten Texteditor mit Syntaxhighlighting

    Was auch immer dir am besten gefällt. Ich mag emacs, andere vi. Beide sind sehr ungewöhnlich, wenn man Klickibunti-Editoren gewöhnt ist, sind aber sehr, sehr gut, wenn man sich zurecht gefunden hat. Ansonsten gibt es auch viele Klickibuntieditoren für Linux, z.B. gedit oder kate, welche jeweils die Standardeditoren der verbreiteten Desktopoberflächen Gnome und KDE sind.

    - debugger

    Nimmste auch den Standarddebugger gdb. Zur Not mit Klickibunti-Frontend, zum Beispiel ddd, wenn dir die Kommandozeile nicht zusagt.

    - Makefile Programm

    Nimmste auch den Standard: GNU make.

    Alles was hier genannt wurde ist Standardsoftware, die auf jedem System vorhanden sein sollte. Spätestens, wenn du irgendwo ein Paket aktiviert hast, dass du selber Software entwickeln möchtest.

    -... und das, was ihr mir noch vorschlagen würdet. 😉

    Du hast hier die tolle Chance, dich an die Kommandozeile zu gewöhnen. versuch nicht, die Klickibuntioberflächen zu nutzen. Mit der Kommandozeile bist du nach wenigen Wochen viel effizienter als mit jeder Oberfläche. Üb am besten jetzt schon. Guck dir einen Crashkurs über die wichtigsten Konzepte an: Tabergänzung (erschreckend viele Leute kennen das nicht), Pipes, Umleitung von Eingaben/Ausgaben, die wichtigsten Grundkommandos um Zeichenströme zu manipulieren (head, tail, cat, cut, grep, sort. Vielleicht auch sed und awk (sind etwas komplexer)), die wichtigsten Grundkommandos zur Ablaufsteuerung (if, for). Damit kannst du supermächtige Einzeiler bauen, für die du in GUIs tagelang rumklicken müsstest.



  • - welches Linux-Derivat schlägt ihr mir vor
    http://www.tldp.org/LDP/lpg/

    - Compiler (nehme wahrscheinlich gcc)
    gcc oder clang

    - Linker
    den von gcc bzw. clang

    - guten Texteditor mit Syntaxhighlighting
    vim 🙂

    - Debugger
    selten benutzt/gebraucht (maximal printf)

    - Makefile Programm
    make

    Sonst: http://www.tldp.org/LDP/abs/html/ und anderes zu sed oder awk



  • Danke für die ausführlichen Antworten. 👍

    SeppJ schrieb:

    Ist das C-Buch auch gut?

    Die C Programmiersprache. Habe ich aus der FAQ 😉

    Du hast hier die tolle Chance, dich an die Kommandozeile zu gewöhnen. versuch nicht, die Klickibuntioberflächen zu nutzen. Mit der Kommandozeile bist du nach wenigen Wochen viel effizienter als mit jeder Oberfläche. Üb am besten jetzt schon.

    Danke, ich werde mir deinen Tipp zu Herzen nehmen.

    Danke Knivil für die Links.



  • Als Ergänzung zu gdb gibt es noch valgrind um Memoryleaks zu finden.

    Fragt sich nur, wie man das am besten lernt, weil das ist eine ganze Menge. Ich hatte das so gemacht:

    1. Ubuntu mit Klickibunti installiert
    2. Mit Geany angefangen, C zu programmieren (printf-Debugging)
    3. Bash gelernt, an die Kommandozeile gewöhnen
    4. Eine seriöse Linux-Distribution genommen
    5. Auf Emacs gewechselt
    6. Makefiles, Bisschen Perl, C++
    7. Spätestens ab dann kommt man allein zurecht



  • Ich habe glaub ich vergessen zu erwähnen, dass ich schon Programmieren kann (~6-7 Jahre C++, C#, C seit einigen Wochen mit dem Buch,...) Leider hab ich Programmieren mit einer IDE gelernt (von der Schule aus), und habe bis jetzt nur mit einer IDE programmiert.
    Wie schon SeppJ gesagt hat, will ich nicht mehr "Klickibunti".

    grindy schrieb:

    1. Ubuntu mit Klickibunti installiert

    Also ich hab mir gerade Ubuntu runtergeladen, aber noch nicht installiert. Wie schon gesagt kenn ich mich mit Linux Null aus. Das Programmieren ist nicht das Problem, überhaupt nicht. Mein Ziel ist es in den Ferien, Linux mit den Programmierwerkzeugen halbwegs standfest zu verwenden (Kommandos,...) und alles ohne Klickibunti.
    Welches Derivat wäre dann ohne Klickibunti?


  • Mod

    neuer User schrieb:

    Welches Derivat wäre dann ohne Klickibunti?

    Irgendeine Desktopoberfläche haben eigentlich alle üblichen Distributionen (außer beispielsweise Arch-Linux und ähnliche, aber da ist der erste Schritt auf dem Heimrechner, sich eine Desktopoberfläche zu installieren). Das ist auch an sich nicht schlecht, denn du willst in der Regel irgendeine Art von Oberfläche. Alleine schon, um einen vernünftigen Webbrowser zu haben. Aber auch mehrere Konsolenfenster gleichzeitig auf dem Schirm sind meistens praktischer als die virtuellen 80x25 Konsolen.

    Ubuntu ist sicherlich keine verkehrte Wahl für einen Anfänger, wobei ich persönlich wirklich nicht mag, wohin die Entwicklung dort in den letzten Jahren ging*. Ansonsten irgendeine Distribution, die auf http://distrowatch.com/ weit oben steht. Die sind recht Mainstream, man sollte keine Probleme haben und wenn doch, bekommt man dank der vielen Nutzer sehr schnell Hilfe über Google. So wirklich viel tun die sich alle nicht, die Hauptunterschiede sind die Paketmanager (das Softwareangebot ist aber in der Regel sehr ähnlich), die Standardoberfläche (in der Regel austauschbar) und die allgemeine Philosophie bei der Auswahl der Standardkomponenten (alles Open Source oder Zugeständnisse an wichtige Closed Source, Aktualität vs. Stabilität).

    P.S.: Auch wenn es auf Distrowatch weit oben steht, würde ich als allererstes Linux nicht unbedingt Arch nehmen. Das ist für den Erstkontakt vermutlich zu elitär (auch wenn das Konzept irgendwie cool ist. Kann man sich später mal angucken).

    *: Da bin ich nicht ganz alleine. Ubuntu war lange Zeit die Mainstreamdistribution, aber Mint hat in den letzten Jahren den Marktanteil mehr als umgedreht.



  • für klickibunti empfehle ich dir
    für gdb nemiver
    als texteditor scribes und geany

    du könntest dir zB xubuntu (benutze ich super xfce distro) installieren und dann einen einfachen window manager benutzen.
    Ansonnsten erreichst du die Textterminals mit strg + alt + F[1..6] F7 für GUI und zB mit screen kannst du mehere Terminals in einem Terminal haben



  • gcc ist klar. Linker ist dabei.

    Als Editor verwende ich vim. Es gibt aber wahrscheinlich keinen Editor, der noch schwerer zu bedienen ist. Aber wenn man das mal gelernt hat, geht es damit sehr flugs. Syntaxhighlighting kann der auch und vieles mehr. Ich bin mir nicht sicher, ob ich den wirklich empfehlen kann. Der könnte leicht abschreckend sein. Es gibt zig Editoren. Probiere einfach einige aus und nimm den, der Dir persönlich ab besten gefällt.

    Meine bevorzugte Linux-Distribution ist momentan Fedora. Aber fast jede andere geht auch.

    Als Benutzeroberfläche verwende ich XFCE oder KDE. Graphische Oberfläche heißt nicht gleich Klickibunti. Ich benötige die graphische Oberfläche hauptsächlich, um Konsolenfenster zu öffnen und dort auf der Kommandozeile Editor und Compiler aufzurufen. Und natürlich für Firefox, damit ich hier in dieses Forum komme 😉 .

    Debugger ohne graphische Oberfläche finde ich anstrengend. Wenn ich wirklich einen Debugger brauche, dann verwende ich kdbg. Das ist eine graphische Oberfläche für gdb.

    Als Build-System verwende ich die Autotools. Neulich habe ich dazu eine gute Seite gefunden: http://www.flameeyes.eu/autotools-mythbuster/. Insbesondere Abschnitt A.1: "Basic Autotoolization" ist eine sehr minimale Einführung.

    Und ein wichtiger Tipp, der von anderen auch schon angedeutet wurde: lerne bash!!!



  • Ich kenne das genannte C Buch nicht. Practical C Programming (Steve Oualline) und
    21st Century C (Ben Clemens) kann ich empfehlen.

    Dir fehlt es an *nix Wissen. GNU/Linux musst du dir als Baukastensystem vorstellen: die verschiedenen Distributionen verwenden verschiedene Bausteine. Abhängig von diesen ergeben sich jeweils verschiedene Vor- und Nachteile. (google z.B. nach init process) Welche Zusammenstellung der einzelnen Bausteine du bevorzugst, wird sich erst mit der Zeit zeigen.

    Abweichend von SeppJ empfehle ich dir aber gerade Arch. Weshalb? Du möchtest ja Wissen um GNU/Linux erwerben! Arch (auch: Debian und Gentoo) ist bestens dokumentiert, schon durch die Installation (https://wiki.archlinux.org/index.php/Beginners'_Guide) lernst du sehr, sehr viel. Vorausgesetzt du setzt dich damit auseinander, soll bedeuten du versuchst jeden unklaren Punkt aufzuklären und folgst nicht nur stur den Anweisungen.

    Und danach heisst es weiterhin lesen, lesen, lesen. Und nicht nur über die Funktionsweise und Handhabung deines Systems, sondern auch über damit eng verbundene Ideen. Weshalb sind grafische Oberflächen bei vielen Aufgaben der Kommandozeile unterlegen? Die Unix-Philosophie beantwortet die Frage. (Und wenn es noch nicht klar ist, dann arbeite eine Zeit lang mit deinem System und du wirst die Flexibilität bemerken.)

    Zum Thema Programmierung unter *nix gibt es einiges an Literatur. Sobald du Zugang zur Uni-Bibliothek hast, würde ich dort herumstöbern. Oder du bringst in Erfahrung, welche Literatur im Studium verwendet wird, und richtest dich nach dieser.

    PS: Es gibt natürlich auch Bücher, die sich mit Betriebssytemen allgemein beschäftigen. Zumindest früher hat man hier Tanenbaum empfohlen. Das hilft, die verschiedenen Spielarten in der *nix Welt besser zu verstehen.

    Wenn du motiviert bist, dann kannst du innerhalb der nächsten zwei Monate einiges an Wissen anhäufen, und beginnst dein Studium mit einem sauber und nach deinen Vorstellungen laufenden System, das dir ausserdem einiges an Arbeit abnimmt. Also los geht's! 😉

    Im übrigen schreibe ich ansonsten nie GNU/Linux, ich möchte nur den TE zum Recherchieren ermutigen. 😉



  • Guck dir mal sublime text als editor an. Die Version 3 ist derzeit in einer OpenBeta und damit kostenpflichtig. Wirkt bisher wie ein wirklich, wirklich guter Editor. Builden/laufen lassen kannste es direkt aus dem Editor raus (STR`+B zum Beispiel).

    Bei Linux empfehle ich einfach mal Arch Linux. Damit kannste direkt von Anfang an Lernen, wie man richtig mit einem Linux umgeht. Man könnte auch sagen: DU musst es lernen.

    Der Vorteil: Das ArchWiki ist verdammt gut. Da findet man fast alle infos, die man jemals braucht. 🙂



  • neuer User schrieb:

    Hallo Com.
    Im Oktober fängt mein Studium für Informatik an und möchte mich in den Sommerferien ein bisschen aufs Studium vorbereiten. Die Programmiersprache ist C unter Linux. Als Programmierwerkzeug verwenden die Professoren keine IDE, sondern alles separat. Ich kenne mich leider mit Linux gar nicht aus und weiß nicht, was ich nehmen soll.

    http://www.proggen.org/doku.php?id=c:start

    neuer User schrieb:

    Was ich brauche:
    - eventuell gutes Lernmaterial (kein C-Buch, da hab ich schon eins, sondern Buch für Linux-Programmierung)

    Du solltest Dich erstmal mit der Bash vertraut machen.

    neuer User schrieb:

    - welches Linux-Derivat schlägt ihr mir vor

    Ubuntu.

    Hier gibt's für Einsteiger am ehesten Hilfen.

    neuer User schrieb:

    - Compiler (nehme wahrscheinlich gcc)

    Wahrscheinlich, aber Du solltest clang auch eine Chance geben.

    neuer User schrieb:

    - Linker

    Lass das mal den Compiler machen.

    neuer User schrieb:

    - guten Texteditor mit Syntaxhighlighting

    Öffz... ich nehme Kate, Geany soll gut sein und will ich mal ausprobieren... vim wenn Du leicht masochistisch veranlagt bist... da gibt's viel Auswahl.

    neuer User schrieb:

    - debugger

    gdb?

    neuer User schrieb:

    - Makefile Programm

    make?

    neuer User schrieb:

    -... und das, was ihr mir noch vorschlagen würdet. 😉

    Lern erstmal einfach C.

    neuer User schrieb:

    Ich habe glaub ich vergessen zu erwähnen, dass ich schon Programmieren kann (~6-7 Jahre C++, C#, C seit einigen Wochen mit dem Buch,...) Leider hab ich Programmieren mit einer IDE gelernt (von der Schule aus), und habe bis jetzt nur mit einer IDE programmiert.
    Wie schon SeppJ gesagt hat, will ich nicht mehr "Klickibunti".

    Mein Ziel ist es in den Ferien, Linux mit den Programmierwerkzeugen halbwegs standfest zu verwenden (Kommandos,...) und alles ohne Klickibunti.

    Mach 'ne Konsole auf oder drück (STRG)-ALT-F1.

    Nur weil Du keine IDE benutzt, muss Du ja nicht auf eine graphische Oberfläche verzichten, ooood'r?

    Wenn Du für die GUIs für die Konsole programmieren willst, schau Dir NCurses an (ist noch eine Baustelle, aber zumindest gibt's ein paar Grundlagen, wenn ich mal wieder viiiel Zeit habe).


Log in to reply