C-programme compilieren unter linux

paco89

Stammuser
hallo,

ich hab mit der programmiersprache c angefangen und wollte meine ersten programme schreiben. allerdings hab ich gehört, dass man mit linux seine dateien compilieren kann ohne irgendwelche c-compiler herunterzuladen. stimmt das?

wenn ja, wie ich meine dateien unter linux kompilieren und ausführen?
 

bitmuncher

Senior-Nerd
Nein, das stimmt nicht. Aber du kannst die GCC (GNU Compiler Collection) einfach über deinen Paketmanager installieren. Dabei werden allerdings auch Programme runtergeladen. Bevor du programmierst, solltest du evtl. erstmal ein paar Grundlagen zu Betriebssystemen und Programmen lernen. Ein Compiler ist ein Programm. Ist kein solches installiert, muss es logischerweise runtergeladen und installiert werden. Per Default haben die wenigsten Linux-Distributionen einen Compiler installiert. Aber alle bieten die Möglichkeit Compiler nach Wunsch nachzuinstallieren, wobei es diese für die meisten Programmiersprachen als OpenSource-Software und somit für lau gibt. Ob bei einem Linux ein C-Compiler bereits installiert ist, kannst du überprüfen indem du einfach mal 'gcc' in einem Terminal eingibst. Wie damit Programme kompiliert werden, erfährst du aus diversen C-Tutorials oder aus der Manpage, die du mit dem Befehl 'man gcc' einsehen kannst, sofern sie installiert ist.
 

paco89

Stammuser
okay. ich habe alles hinbekommen. aber wenn ich meine datei von der shell aus aufrufe, brauch es verdammt viel zeit bis ich es daraus ne ausführbare datei machen kann. ist das normal?
 

bitmuncher

Senior-Nerd
grosser Quelltext = lange Zeit zum Kompilieren
wenig Rechenleistung = lange Zeit zum Kompilieren
schlechter Code = lange Zeit zum Kompilieren
hohes Optimierungslevel = lange Zeit zum Kompilieren
schlecht eingerichtetes System = lange Zeit zum Kompilieren
...

Such dir was aus oder liefere ein paar Informationen mehr. Was kompilierst du? Wie kompilierst du?
 

paco89

Stammuser
so zuerst hab ich in die konsole den befehl:
$ gedit first.c
eingegeben. danach hat sich der editor geöffnet und ich hab folgenden code eingegeben :

# include <stdio>

int main(void)
{
printf("Das ist mein 1. Programm.\n");
return 0;
}

danach habe ich das gespeichert und den befehl :

gcc first.c -o first

eingetippt. so und danach kam gar nichts mehr. also die zeile mit dem dollar-zeichen am ende, was ja immer erscheint, erschien nicht mehr, um den nächsten befehl :
./first

einzutippen.
 

paco89

Stammuser
okay, leute. ich hab mein problem selber gelöst. ich habe das h in <stdio.h> vergessen. deshalb funktionierte das ganze nicht. was für ein bock1
 

bitmuncher

Senior-Nerd
Na dann werfen wir mal einen Blick in die Manpage.

Code:
SYNOPSIS
       gcc [-c|-S|-E] [-std=standard]
           [-g] [-pg] [-Olevel]
           [-Wwarn...] [-pedantic]
           [-Idir...] [-Ldir...]
           [-Dmacro[=defn]...] [-Umacro]
           [-foption...] [-mmachine-option...]
           [-o outfile] [@file] infile...

Der relevante Part:

Code:
SYNOPSIS
       gcc 
           [-o outfile] infile...

Was schlussfolgern wir daraus?

Code:
gcc -o first first.c

Das dürfte wohl die richtige Syntax sein. Die Input-Dateien müssen immer als letzte Parameter angegeben werden, da alte Versionen von GCC mit einer Umstellung der Parameter nicht immer umgehen können. Zusammenfassend könnte man die Syntax von gcc also so ausdrücken:

Code:
gcc <parameter> <quelldateien>

Im übrigen wäre es gut, wenn du die Code-Tags hier im Forum verwenden würdest, wenn du Quelltexte oder sonstige formatierte Texte darstellen willst. Das macht sie besser lesbar, da Einrückungen erhalten bleiben.

Code:
#include <stdio.h>

int main(void)
{
  printf("Das ist mein 1. Programm.\n");
  return 0;
}

Ausserdem ist dein Source falsch. Die Header-Datei, die du inkludieren willst, heisst stdio.h und nicht stdio. Und üblicherweise macht man hinter dem # bei Präprozessor-Direktiven kein Freizeichen, auch wenn einige Compiler damit mittlerweile umgehen können. Also nicht '# include ...' sondern '#include ...'.

Edit: Wäre dein Fehler übrigens nur die fehlende Dateiendung bei der Header-Datei gewesen, hätte GCC dir einen entsprechenden Fehler ausgegeben:

Code:
first.c:1:18: error: stdio: No such file or directory
first.c: In function 'main':
first.c:5: warning: incompatible implicit declaration of built-in function 'printf'

und hätte nicht einfach das Terminal blockiert.
 
Oben