gccKomma igång med gcc


Anmärkningar

GCC (versaler) hänvisar till GNU Compiler Collection. Detta är en kompileringssvit med öppen källkod som innehåller kompilatorer för C, C ++, Objekt C, Fortran, Ada, Go och Java. gcc (små bokstäver) är C-kompilatorn i GNU Compiler Collection. Historiskt har GCC och gcc använts omväxlande, men ansträngningar görs för att separera de två termerna eftersom GCC innehåller verktyg för att sammanställa mer än C.

Dokumentation i detta avsnitt hänvisar till gcc, GNU C-kompilatorn. Avsikten är att ge en snabb uppslagning av vanliga åtgärder och alternativ. GCC-projektet har detaljerad dokumentation på https://gcc.gnu.org som dokumenterar installation, allmän användning och alla kommandoradsalternativ. Se den officiella GCC-dokumentationen för alla frågor som inte besvaras här. Om ett visst ämne är oklart i GCC-dokumentationen, begär specifika exempel.

versioner

Version Utgivningsdatum
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

"Hej världen!" med vanliga kommandoradsalternativ

För program med en enda källfil är det enkelt att använda gcc.

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

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

För att sammanställa filen hello_world.c från kommandoraden:

gcc hello_world.c
 

gcc kommer sedan att kompilera program och mata ut den körbara till filen a.out. Om du vill namnge den körbara kör du alternativet -o.

gcc hello_world.c -o hello_world
 

Den körbara kommer då att namnges hello_world istället för a.out. Som standard finns det inte så många varningar som avges av gcc. gcc har många varningsalternativ och det är en bra idé att titta igenom gcc-dokumentationen för att lära dig vad som finns tillgängligt. Att använda '-Wall' är en bra utgångspunkt och täcker många vanliga problem.

gcc -Wall hello_world.c -o hello_world
 

Produktion:

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

Här ser vi att vi nu får en varning om att variabeln 'i' deklarerades men inte används alls i funktionen.

Om du planerar att använda en felsökare för att testa ditt program måste du berätta för gcc att inkludera felsökningsinformation. Använd alternativet '-g' för felsökningssupport.

gcc -Wall -g hello_world.c -o hello_world
 

hello_world har nu felsökningsinformation som stöds av GDB. Om du använder en annan felsökare kan du behöva använda olika felsökningsalternativ så att utmatningen formateras korrekt. Se den officiella gcc-dokumentationen för fler felsökningsalternativ.

Som standard kompilerar gcc kod så att det är lätt att felsöka. gcc kan optimera utgången så att den slutliga körbara ger samma resultat men har snabbare prestanda och kan resultera i en mindre storlek körbar. Alternativet "-O" möjliggör optimering. Det finns flera erkända kval för att lägga till efter O för att ange optimeringsnivån. Varje optimeringsnivå lägger till eller tar bort en uppsatt lista med alternativ för kommandorad. '-O2', '-Os', '-O0' och '-Og' är de vanligaste optimeringsnivåerna.

gcc -Wall -O2 hello_world.c -o hello_world
 

'-O2' är den vanligaste optimeringsnivån för produktionskod. Det ger en utmärkt balans mellan prestandaförhöjning och slutlig körbar storlek.

gcc -Wall -Os hello_world.c -o hello_world
 

'-Os' liknar '-O2', förutom vissa optimeringar som kan öka körhastigheten genom att öka den körbara storleken är inaktiverade. Om den slutliga körbara storleken är viktig för dig, prova "-Os" och se om det finns en märkbar storleksskillnad i den slutliga körbara.

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

Observera att i ovanstående exempel med '-Os' och '-O2' togs bort alternativet '-g'. Det beror på att när du börjar berätta kompilatorn att optimera koden, kanske vissa kodrader inte längre finns i den slutliga körbara som gör felsökning svår. Men det finns också fall där vissa fel bara uppstår när optimeringar är på. Om du vill felsöka din applikation och låta kompilatorn optimera koden kan du prova "-Og" -alternativet. Detta säger gcc att utföra alla optimeringar som inte borde hindra felsökningsupplevelsen.

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

'-O0' utför ännu mindre optimeringar än '-Og'. Detta är den optimeringsnivå som gcc använder som standard. Använd det här alternativet om du vill se till att optimeringar är inaktiverade.

Bestäm gcc-versionen

När du hänvisar till gccs dokumentation bör du veta vilken version av gcc du kör. GCC-projektet har en manual för varje version av gcc som innehåller funktioner som implementeras i den versionen. Använd alternativet '-v' för att bestämma vilken version av gcc du kör.

gcc -v
 

Exempel på utgång:

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)
 

I det här exemplet ser vi att vi kör gcc version 5.3.1. Du skulle då veta att hänvisa till GCC 5.3-manualen. Det är också bra att inkludera din gcc-version när du ställer frågor om du har ett versionspecifikt problem.