gccErste Schritte mit gcc


Bemerkungen

GCC (Großbuchstaben) bezieht sich auf die GNU Compiler Collection. Dies ist eine Open-Source-Compiler-Suite, die Compiler für C, C ++, Objective C, Fortran, Ada, Go und Java enthält. gcc (Kleinschreibung) ist der C-Compiler in der GNU Compiler Collection. In der Vergangenheit wurden GCC und gcc austauschbar verwendet, es werden jedoch Anstrengungen unternommen, die beiden Begriffe zu trennen, da GCC Werkzeuge enthält, um mehr als C zu kompilieren.

Die Dokumentation in diesem Abschnitt bezieht sich auf gcc, den GNU C-Compiler. Die Absicht ist es, einen schnellen Überblick über gängige Aktionen und Optionen zu bieten. Das GCC-Projekt enthält eine detaillierte Dokumentation unter https://gcc.gnu.org, in der die Installation, die allgemeine Verwendung und alle Befehlszeilenoptionen dokumentiert sind. Bitte beachten Sie die offiziellen GCC-Unterlagen zu allen Fragen, die hier nicht beantwortet werden. Wenn ein bestimmtes Thema in der GCC-Dokumentation unklar ist, fordern Sie bitte konkrete Beispiele an.

Versionen

Ausführung Veröffentlichungsdatum
7.1 2017-05-02
6.3 2016-12-21
6.2 2016-08-22
5.4 2016-06-03
6.1 2016-04-27
5.3 2015-12-04
5.2 2015-07-16
5.1 2015-04-22
4.9 2014-04-22
4,8 2013-03-22
4.7 2012-03-22
4.6 2011-03-25
4,5 2010-04-14
4.4 2009-04-21
4.3 2008-03-05
4.2 2007-05-13
4.1 2006-02-28
4,0 2005-04-20
3.4 2004-04-18
3.3 2003-05-13
3.2 2002-08-14
3.1 2002-05-15
3,0 2001-06-18
2,95 1999-07-31
2.8 1998-01-07
2,7 1995-06-16
2.6 1994-07-14
2,5 1993-10-22
2.4 1993-05-17
2.3 1992-10-31
2.2 1992-06-08
2.1 1992-03-24
2,0 1992-02-22
1.42 1992-09-20
1.41 1992-07-13
1.40 1991-06-01
1.39 1991-01-16
1,38 1990-12-21
1,37 1990-02-11
1,36 1989-09-24
1,35 1989-04-26
1,34 1989-02-23
1,33 1989-02-01
1,32 1988-12-21
1,31 1988-11-19
1,30 1988-10-13
1,29 1988-10-06
1,28 1988-09-14
1,27 1988-09-05
1,26 1988-08-18
1,25 1988-08-03
1,24 1988-07-02
1,23 1988-06-26
1,22 1988-05-22
1,21 1988-05-01
1,20 1988-04-19
1.19 1988-03-29
1.18 1988-02-04
1.17 1988-01-09
1.16 1987-12-19
1,15 1987-11-28
1.14 1987-11-06
1.13 1987-10-12
1.12 1987-10-03
1.11 1987-09-05
1.10 1987-08-22
1,9 1987-08-18
1.8 1987-08-10
1.7 1987-07-21
1.6 1987-07-02
1,5 1987-06-18
1.4 1987-06-13
1.3 1987-06-10
1.2 1987-06-01
1.1 1987-05-24
1,0 1987-05-23
0,9 1987-03-22

"Hallo Welt!" mit allgemeinen Befehlszeilenoptionen

Für Programme mit einer einzigen Quelldatei ist die Verwendung von gcc einfach.

/* File name is hello_world.c */
#include <stdio.h>

int main(void)
{
    int i;
    printf("Hello world!\n");
}
 

So kompilieren Sie die Datei hello_world.c über die Befehlszeile:

gcc hello_world.c
 

gcc kompiliert dann das Programm und gibt die ausführbare Datei in die Datei a.out aus. Wenn Sie die ausführbare Datei benennen möchten, verwenden Sie die Option -o.

gcc hello_world.c -o hello_world
 

Die ausführbare Datei wird dann hello_world anstelle von a.out genannt. Standardmäßig gibt es nicht so viele Warnungen, die von gcc ausgegeben werden. gcc bietet viele Warnoptionen und es ist eine gute Idee, in der gcc-Dokumentation nachzuschlagen, was verfügbar ist. Die Verwendung von "Wall" ist ein guter Ausgangspunkt und deckt viele häufig auftretende Probleme ab.

gcc -Wall hello_world.c -o hello_world
 

Ausgabe:

hello_world.c: In function ‘main’:
hello_world.c:6:9: warning: unused variable ‘i’ [-Wunused-variable]
     int i;
         ^
 

Hier sehen wir nun eine Warnung, dass die Variable 'i' zwar deklariert, aber in der Funktion überhaupt nicht verwendet wurde.

Wenn Sie zum Testen eines Programms einen Debugger verwenden möchten, müssen Sie gcc anweisen, Debugging-Informationen einzuschließen. Verwenden Sie die Option '-g' zur Unterstützung der Fehlersuche.

gcc -Wall -g hello_world.c -o hello_world
 

In hello_world sind jetzt Debugging-Informationen vorhanden, die von GDB unterstützt werden. Wenn Sie einen anderen Debugger verwenden, müssen Sie möglicherweise andere Debugging-Optionen verwenden, damit die Ausgabe korrekt formatiert wird. Weitere Debugging-Optionen finden Sie in der offiziellen gcc-Dokumentation.

Standardmäßig kompiliert gcc Code, sodass das Debuggen einfach ist. gcc kann die Ausgabe so optimieren, dass die endgültige ausführbare Datei dasselbe Ergebnis liefert, jedoch eine schnellere Leistung aufweist und möglicherweise eine kleinere ausführbare Datei erstellt wird. Die Option '-O' ermöglicht die Optimierung. Nach dem O müssen mehrere anerkannte Qualifikationsmerkmale hinzugefügt werden, um den Optimierungsgrad anzugeben. Jede Optimierungsebene fügt eine Liste von Befehlszeilenoptionen hinzu oder entfernt sie. '-O2', '-Os', '-O0' und '-Og' sind die häufigsten Optimierungsstufen.

gcc -Wall -O2 hello_world.c -o hello_world
 

"-O2" ist die häufigste Optimierungsstufe für produktionsbereiten Code. Es bietet ein hervorragendes Gleichgewicht zwischen Leistungssteigerung und endgültiger Größe der ausführbaren Datei.

gcc -Wall -Os hello_world.c -o hello_world
 

"-Os" ähnelt "-O2", mit der Ausnahme, dass bestimmte Optimierungen, die die Ausführungsgeschwindigkeit erhöhen können, indem sie die Größe der ausführbaren Datei erhöhen, deaktiviert sind. Wenn die endgültige Größe der ausführbaren Datei für Sie von Bedeutung ist, probieren Sie '-Os' und prüfen Sie, ob die endgültige ausführbare Datei einen merklichen Größenunterschied aufweist.

gcc -Wall -g -Og hello_world.c -o -hello_world
 

Beachten Sie, dass in den obigen Beispielen mit '-Os' und '-O2' die Option '-g' entfernt wurde. Dies liegt daran, dass bestimmte Codezeilen in der endgültigen ausführbaren Datei möglicherweise nicht mehr vorhanden sind, wenn Sie dem Compiler mitteilen, dass er den Code optimieren soll, was das Debuggen schwierig macht. Es gibt jedoch auch Fälle, in denen bestimmte Fehler nur bei aktivierten Optimierungen auftreten. Wenn Sie Ihre Anwendung debuggen und den Code vom Compiler optimieren lassen möchten, versuchen Sie die Option '-Og'. Dies weist gcc an, alle Optimierungen durchzuführen, die die Debugging-Erfahrung nicht beeinträchtigen sollten.

gcc -Wall -g -O0 hello_world.c -o hello_world
 

'-O0' führt noch weniger Optimierungen durch als '-Og'. Dies ist die Optimierungsstufe, die gcc standardmäßig verwendet. Verwenden Sie diese Option, wenn Sie sicherstellen möchten, dass Optimierungen deaktiviert sind.

Bestimmen Sie die gcc-Version

Wenn Sie sich auf die Dokumentation von gcc beziehen, sollten Sie wissen, welche Version von gcc Sie ausführen. Das GCC-Projekt enthält für jede Version von gcc ein Handbuch, das Funktionen enthält, die in dieser Version implementiert sind. Verwenden Sie die Option '-v', um die Version von gcc zu ermitteln, die Sie ausführen.

gcc -v
 

Beispielausgabe:

Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/5.3.1/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --disable-libgcj --with-default-libstdcxx-abi=gcc4-compatible --with-isl --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 5.3.1 20160406 (Red Hat 5.3.1-6) (GCC)
 

In diesem Beispiel sehen wir, dass wir die gcc-Version 5.3.1 ausführen. Sie können sich dann auf das Handbuch GCC 5.3 beziehen. Es ist auch hilfreich, wenn Sie Ihre gcc-Version angeben, wenn Sie Fragen haben, falls Sie ein versionsspezifisches Problem haben.