[Next] [Previous] [Top]

UNIX-Lehrtext

8. Compiler


Die gebräuchlichsten Compiler unter Unix sind:

cc
Der C-Compiler; häufig in einer ANSI- und einer nicht-ANSI-Version vorhanden (ANSI-C ist standardisiertes C), wie z.B. auf AIX.
gcc
Der GNU C-Compiler; gcc kennt ANSI- und nicht-ANSI-C. Siehe auch den Info-Eintrag im emacs.
c++
Der GNU C++ Compiler; er ist mit dem gcc kombiniert.
f77
Der FORTRAN-Compiler, meistens deutlich erweitertes Fortran 77. Fortran 90 Compiler sind noch sehr selten; sie werden oft durch f90 aufgerufen.
Der Compilier-Prozess durchläuft folgende Stufen:

  1. Präprozessorlauf. Alle Kommentare werden entfernt. Präprozessoranweisungen werden eingesetzt, sofern der Compiler diese unterstützt (z.B. C-Compiler).

  2. Uebersetzen.

  3. Optimieren, sofern dies beim Compileraufruf gewünscht wurde. Nach Compilation und Optimierung liegt ein Assembler-Programm vor.

  4. Assemblieren. Dies übersetzt das Assembler-Programm in eine maschinenlesbare Objektdatei.

  5. Binden. Alle erzeugten Objektdateien und notwendigen bzw. angeforderten Bibliotheken werden zusammen zu einer ausführbaren Datei gebunden.

Folgende Dateiendungen werden üblicherweise vom jeweiligen Compiler erkannt:

.c
C-Quellcode-Datei
.cc
C++ Quellcode-Datei (manchmal auch auf .C endend)
.f
FORTRAN-Quellcode-Datei (manchmal auch .f77 oder .for)
.p
Pascal-Quellcode-Datei (manchmal auch .pas)
.s
Assembler-Datei
.o
compilierte (aber noch nicht gebundene) Objektdatei
.i
C-Quellcode-Datei nach dem Präprozessorlauf (wird durch Aufruf des Compilers mit "-P" erzeugt)
Folgende Optionen werden von den meisten Compilern erkannt. Compileroptionen müssen getrennt angegeben werden, jede einzelne mit einem Minuszeichen davor. Die Optionen werden durch ein Leerzeichen getrennt. Wegen der genauen Anordnung der Optionen und der erwarteten Argumente ist ein Blick auf die Manualseiten erforderlich. Nach der Auflistung der Optionen geben wir einige typische Beispiele an.

-O
Erzeugt optimierten Code; das so generierte ausführbare File ist wesentlich schneller. Oft kann zwischen verschiedenen Optimierungsstufen gewählt werden. Allerdings können die Optimierungsalgorithmen eines Compilers fehlerhaft sein. Deswegen sollte die Optimierung während der Entwicklungs-phase eines Programmes eher vorsichtig oder gar nicht eingesetzt werden.
-g
Erzeugt zusätzliche Informationen, die benötigt werden, um ein Programm mit einem Quellcode-Debugger zu untersuchen (siehe weiter unten, Seite 38).
-c
Die Datei wird compiliert, aber nicht gebunden. Die resultierende Objektdatei hat die Endung ".o".
-o <Name>
Nennt das ausführbare File Name und nicht "a.out", wie der voreingestellte Wert lautet.
-l <Bibliothek>
Bindet die Objektdatei mit der angegebenen Bibliothek zusammen. Will man z.B. mathematische Funktionen verwenden, so müssen die Objektdateien mit der Mathematik-Bibliothek "libm.a" gebunden werden. Da alle Bibliotheken Namen der Form "libx.a" haben, muss nur der Teil x beim Aufruf unmittelbar nach dem "-l" angegeben werden. Deswegen bindet man die Mathematik-Bibliothek mit der Option "-lm" (siehe auch das Beispiel weiter unten, Seite 37). Bei der Angabe mehrerer Bibliotheken, die voneinander abhängen, ist darauf zu achten, dass eine Bibliothek, die Information einer anderen Bibliothek verwendet, vor dieser dazugebunden wird.
Um die Datei "erster_Versuch.c" mit cc zu übersetzen, wobei optimiert werden soll, aber nicht gebunden, gibt man an:

cc -O -c erster_Versuch.c
Um die Datei "expo.c" mit gcc zu übersetzen, wobei neben der Anlage von Symboltabellen die Mathematik-Bibliothek dazugebunden werden und die ausführbare Datei expo heissen soll, verwendet man:

gcc -g -o expo expo.c -lm
In der Regel tut ein Programm beim ersten Testlauf nicht genau das, was von ihm erwartet wird. Um rein syntaktische Fehler in einem C-Programm zu finden, verwendet man den Syntaxprüfer lint. Aehnliche Prüfprogramme gibt es auch für andere Programmiersprachen, allerdings sind sie z.B. für FORTRAN leider nicht so verbreitet.

Ein Quellcode-Debugger erlaubt es, Schritt für Schritt durch ein Programm zu laufen, die Werte von Parametern zu überprüfen usw., während gleichzeitig der entsprechende Quellcode angezeigt wird. Leider unterstützen viele Debugger auf Unix-Systemen nur C, allerdings scheint sich das langsam zu verbessern. Auf den meisten Unix-Systemen ist der Debugger dbx verfügbar, auf manchen auch nur der weniger mächtige sdb. Sehr gute Debugger sind die frei erhältlichen Debugger gdb und ups sowie einige kommerzielle Produkte.

Um diese Quellcode-Debugger verwenden zu können, muss das zu untersuchende Programm mit der "-g" Option übersetzt worden sein. Viele Compiler lassen die gleichzeitige Verwendung der Optionen "-g" und "-O" nicht zu. Da aber ein Optimierer ohnehin den Fluss eines Programmes sehr verändern kann, ist dies auch nur in wenigen Fällen wirklich wünschenswert.

Um die Compilierung einfacher und angenehmer zu machen, gibt es das Programm make. Mit make kann das Uebersetzen weitgehend automatisiert werden, was insbesondere bei grösseren Programmierprojekten essentiell ist.


UNIX-Lehrtext - 23 SEP 94
[Next] [Previous] [Top]

Generated with WebMaker