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