UNIX C-Compiler

Willemers Informatik-Ecke

C und UNIX sind eng verwoben

Lange Zeit wurde jeder UNIX Maschine immer auch ein C-Compiler beigelegt. Selbst wenn dieser in den späteren Jahren als Handwerkszeug für den Softwareentwickler aufgrund mangelnder Aktualität wenig brauchbar war, benötigte ihn der Administrator, um einen neuen Kernel zu erstellen. Inzwischen ist es längst üblich, dass man den C-Compiler dazu kaufen muss.

Der GNU-Compiler

Dies, die Qualität manches Compilers und die Inkompatibilität zwischen den Compilern führte dazu, dass inzwischen der GNU-Compiler ein wichtiger Standard auf den UNIX-Maschinen ist. Er ist für fast jede Plattform erhältlich, er verhält sich überall gleich und ist immer auf dem neuesten Stand. Dazu kommt, dass er kostenlos verfügbar ist. Das klingt fast nach einem Perpetuum Mobile der Informatik. Der Hintergrund sind die Universitäten, die mit diesem Compiler ein Grundgerüst zur Verfügung haben, um Studenten die Prinzipien des Compilerbaus zu lehren. Ergebnisse der Compilerbauforschung gelangen über Diplomarbeiten sehr schnell in die Weiterentwicklung.

Aufruf durch cc

Der UNIX C Compiler wird immer als cc aufgerufen. Dabei erkennt er selbst, ob er als Präcompiler, als Compiler oder als Linker tätig werden soll. Selbst ob es sich um C oder C++ handelt erkennt er an der Extension der Dateien. Obwohl hinter dem cc sehr unterschiedliche Compiler verschiedenster Hersteller stecken können, sind die wichtigsten Optionen überall gleich.

Wer vom PC oder Mac kommt, wundert sich vielleicht, dass sich unter UNIX keine IDE (Integrated Development Environment) durchgesetzt hat. Tatsächlich gibt es diese Umgebungen natürlich auch für X, wie beispielsweise das Apex unter Solaris. Dennoch arbeiten die meisten UNIX Programmierer von der Shell aus. Durch das sehr leistungsfähige make (siehe später) braucht das Übersetzen nur ein Kommando und man kann Abhängigkeiten definieren, die mit IDEs kaum machbar sind.

Für einen ersten Versuch soll ein einfaches Programm übersetzt und gestartet werden. Es heißt moin.c und grüßt die Region (Die weltmännischeren Programmierer können auch gern die Welt grüßen.)

gaston> cat moin.c
main()
{
    puts("Moin, Torfmoorholm!");
}
gaston> cc moin.c
gaston> a.out
Moin, Torfmoorholm!
gaston>  

Aufruf und Parameter

Der C-Compiler wird mit cc gefolgt von dem Dateinamen der Quelldatei aufgerufen. Es entsteht die ausführbare Datei a.out. Mit Hilfe der Flag -o kann der Name der Zieldatei geändert werden. cc ruft nacheinander Precompiler, C-Compiler, Assembler und Linker auf. Wichtige Optionen beim Aufruf des C-Compilers lauten:

-o Dateiname
Die Ausgabedatei erhält den Namen Dateiname.
-c Dateiname
Kompiliert eine einzelne C-Quelltextdatei. Es entsteht eine linkfähige Objektdatei mit der Endung .o.
-IPfad
Ergänzt den Pfad, in dem nach Headerdateien gesucht werden soll.
-LPfad
Ergänzt den Pfad, in dem nach Bibliotheken gesucht werden soll.
-lName
Verwendet beim Linklauf die Bibliothek libName.a. Die Datei wird in den Standardlinkpfaden (beispielsweise /usr/lib) und denen durch -L angegebenen gesucht.
-g
Dem Code werden Informationen für den Debugger hinzugefügt. So kann man im Test Variablen und Funktionen mit Namen benennen.
-DName
Mit dieser Option könnnen Namen definiert werden. Diese sind mit denen der Präprozessoranweisung #define gleichwertig. Soll der name einen Wert zugewiesen bekommen, muss -DName=Wert angegeben werden.

Weil es so leicht zu verwechseln ist, sei es hier noch einmal auseinander gehalten. Die Option -I ist ein großes i (für include) und gibt den Headerpfad an und die Option -l ist ein kleines L (für library) und gibt die hinzuzubindende Bibliothek an.

Ein paar kleine Fallstricke gibt es, auf die Programmierer, die von anderen Umgebungen her kommen, unter UNIX leicht hereinfallen können.

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru
Verlagsrechte bei galileo computing


Homepage (C) Copyright 2002 Arnold Willemer