2.2 Klassifikation der Dateitypen durch Suffixe


gcc ist das Kommando zum Aufruf des GNU-C-Compilers. Es erzeugt ausfuehrbare Programme, indem es die angegebenen Datei(en) kompiliert. bzw. assembliert, bevor es den Linker ld aufruft, um die entsprechenden Objectdateien zu einem ausfuehrbaren Programm zusammenbinden zu lasen. Die Voreinstellung ist, dass gcc das erzeugte Programm in einer Datei mit dem Namen a.out ablegt. Als Datei(en) akzeptiert gcc eine ganze Reihe von Dateitypen, die gcc dabei ueber das Suffix klassifiziert Die wichtigsten Suffixe sind folgende:
.c
Ein C-Quellprogramm wird zunaechst in eine Objectdatei uebersetzt, wobei fuer den Namen der Objectdatei das Suffix .c durch .o ersetzt wird. Falls nur ein C-Quellprogramm beim Aufruf des Compiliers angegeben ist, wir die .o-Datei sofort gelinkt und dann geloescht.
.h
C-Headerdatei
.C
C-Quellprogramm
.cc
C-Quellprogramm
.cxx
C-Quellprogramm
.m
Objective C-Quellprogramm
.s
Ein Assembler-Quellprogramm wird zunaechst assembliert und daraus dann eine Objectdatei erstellt, wobei fuer den Namen der Objectdate das Suffix .s durch .o ersetzt wird. Falls nur ein Assembler-Quellprogramm beim Aufruf des Compiliers angegeben ist, wir die .o-Datei sofort gelinkt und dann geloescht.
.S
Assembler-Quellprogramm. Anders als bei der Endung .s wird ein solches Assemblerprogramm auf durch den Praeprozessort geschickt
.i
Vom Praeprozessor vorverarbeitetes C-Quellprogramm. Ein solches vorverarbeitetes C-Quellprogramm wird zunaechst in eine Objectdatei uebersetzt, wobei fuer den Namen der Objectdatei das Suffix .i durch .o ersetzt wird. Falls nur eine .i-Datei beim Aufruf des Compilers angegeben ist, wie die .o-Datei sofort gelinkt und dann geloescht.
.ii
Vom Praeprozessor vorverarbeitetes C-Quellprogramm.
andere Suffixe
Dateien, deren Namen mit einem anderem Suffix enden (wie z. B. Objektdateien mit Suffix .o oder Bibliotheken mit dem Suffix .a), werden von gcc solange ignoriert, bis alle auf der Kommandozeile angegebenen Quellprogramme kompiliert oder assembliert sind. Erst dann uebergibt gcc alle gerade generierten Objectdateien zusammen mit diesen explizit auf der Kommandozeile erwaehnren Objekt- und Bibliotheksdateien an den Linker ld, damit dieser sie alle zu einem ausfuehrbaren Programm zusammenbindex.
gcc legt normalerweise seine uebersetzten Dateien im Working-Directory ab; deshalb ist es wichtig, dass das Working-Directory nicht schreibgeschuetzt ist.

Wichtige Optionen

Jetzt folgt eine Auflistung wichtiger Optionen, die beim Arbeiten mit gcc haeufig benoetigt werden
-ansi
schaltet den ANSI-C-Standard ein, so dass nur ANSI-C-Konstrukte in den zu kompilierenden Quellprogrammen verwendet werden koennen.
-c
(compile only) die angegebenen Quellprogramme nur kompilieren und nicht linken. In diesem Fall werden die erzeugten Objectdateien (Suffix .o) nicht geloescht.
-C
(Comment) veranlasst den Praeprozessor, alle Kommentarzeilen an den Compiler weiterzuleiten. Ausnahme sind dabei Kommentare, die in Zeilen mit Praeprozessoranweisungen stehen; wird oft mit der Option -E benutzt
-Dname[=wert]
(Define) definiert den Namen name fuer den Praeprozessort, als ob dieser Name mit #define in jedem Quellprogramm definiert waere. Fall nur -Dname angegeben ist, entspricht die der Angabe -Dname=1. Wird fuer wert ein String angegeben, muss die Interpretation der Anfuehrungszeigen durch die Shell ausgeschlatet werden, wie z. B. '-D"sprache=german"' oder -D\"sprache=german\". Sollte der String Leerzeichen enthalten, empfiehtl sich die erste Angabeform.
-E
die angegebenen Quellprogamme werden nur durch den Praeprozessor geschickt und das Ergebnis wird auf der Standardausgabe ausgegeben.
-g, -ggdb
(debug) fuegt Debug-Informationen zum generierten Programm bzw. zu den Objectdateien hinzu. -g veranlasst gcc, nur Standard-Debug-Informationen hinzuzufuegen, waehrend -ggdb dagegen bewirkt, dass gcc spezielle Debug-Informationen hinzufuegt, die nur der Debugger gdb versteht. gcc kann im uebrigen - anders als andere Compiler - auch fuer optimierten Code Debug-Informationen generieren.
-ldirectory
(Include-directory) fuegt das angegebene directory zur Liste der Directories hinzu, in denen nach #include-Dateien zu suchen ist. Die voreingestellte Suche fuer in spitzen Klammern angegebene #include-Dateien ist das Directory /usr/include und fuer in Anfuehrungszeichen angegebene #include-Dateien das Working-Direztory.
-lname
(libary) verwendet zum linken die Bibliothek libname.so bzw. libname.a. Wenn nicht anders vorgesehen, verwendet gcc zum Linken dynamische Bibliotheken (libname.so) statt statischer Bibliotheken (libname.a). Der Linker sucht nach Funktionen (unresolved references) in allen angegebenen Bibliotheken in der Reihenfolge, in der diese angegeben sind, bis jeweils der erste passende Eintrag gefunden wurde.
-Ldirectory
(Libary) fuegt das angegebene Directory zur Liste der Directories hinzu, in denen nach Bibliotheksdateien zu suchen ist. Wenn nicht anders angegeben, zieht der gcc dynamische Bibliotheken (shared libaries) vor. Das voreingestellt Directory fuer die Suche nach Bibliotheken ist /usr/lib.
-o name
(output) Normalerweise erzeugt gcc eine Ausgabedatei mit dem Namen a.out. Wird ein anderer Name fuer die von gcc erzeugte Datei gewuenscht, ist die mit dieser Option moegilch. Diese Option ist auch sehr nuetzlich, wenn die Ausgabedatei(en) in ein anderes Directory anzulegen sind.
-O, -On
(Optimize) schaltet den Optimierer ein. Ueber die Angabe einer Ziffer kann man diese Optimierungsstufe festlegen. -O ohne Angabe einer Ziffer entspricht der niedrigsten Optimierungsstufe (-O1). -O0 schaltet die Optimierung aus. -O3 die die zur Zeit hoechte Optimierungsstufe.
-p
(Profiling) fuegt in den Objectdateien zusaetzlichen Profilingcode hinzu. Der Profilingcode zaehlt mit, wie oft die einzelnen Funktionen aufgerufen werden und schreibt diese Information in die Datei gmon.out. Mit Hilfe von gprof kann daraus dann nach dem Programmlauf eine lesbare Protokolldatei generiert werden.
-pendantic
weist gcc an, alle Warnungen und Fehlermeldungen auszugeben, die vom ANSI-C-Standard gefordert werden.
-static
zum Linken werden nur statische Bibliotheken verwendet.
-S
Die angegebenen C-Dateien werden uebersetzt, jedoch nicht assembliert oder gelinkt. Die dabei erzeugten Assemblerprogramme werden in Dateien mit dem Suffix .s abgelegt.
-Uname
(Undefine) Definition des Namens name fuer den Praeprozessor aufheben, so als ob die Definition fuer name mit #undef in jedem Quellprogramm aufgehoben worden waere. Falls derselbe Name sowohl in einer -D, als auch in einer -U Option erwaehnt ist, so hat -U die hoeherer Prioritaet.
-Wall
Aktiviert alle im allgemeinen sinnvollen Warnungen, ueber die gcc verfuegt. Mit dieser Option erreicht man einen aehnlich sicheren Code, wie wenn man den Syntaxpruefer lint auf seine Quellprogramme anwenden wuerde. gcc erlaubt es jedoch, einzelne Warnungen an- oder auszuschalten. Um sich alle diese Warnungstypen auflisten zu lassen, sollte man sich die Manpage von gcc ansehen.
Zurueck || Index || Vor