C Academy · Lektion

Kompilera flera filer

Bygg ett program med flera filer.

Lektion 4 av 413 steg

Kompilera flera filer är en gratis lektion i C Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C Academy innehåller totalt 4 lektioner.

Från källkod till program

Att omvandla C-källkod i flera filer till en körbar fil sker i två steg: kompilering och länkning.

Varje .c-fil kompileras separat till en objektfil. Därefter kombinerar länkaren alla objektfiler och löser referenserna mellan dem till ett körbart program.

Bygg med ett enda kommando

Det enklaste sättet är att ange alla källfiler för gcc samtidigt. Kompilatorn bygger varje fil och länkar sedan automatiskt.

Flaggan -o anger namnet på utdatafilen. Lista alla .c-filer; headerfiler hämtas via #include och ska inte anges här.

gcc main.c math_utils.c -o app

Separat kompilering

I större projekt kompilerar ni varje fil till en objektfil med -c. Det skapar en .o-fil utan att länka.

Separat kompilering innebär att en ändring i en enda källfil bara kräver att den filen kompileras om, vilket snabbar upp stora byggen.

gcc -c main.c        /* produces main.o */
gcc -c math_utils.c  /* produces math_utils.o */

Länkningssteget

När ni har objektfiler länkar ni dem till en körbar fil. Här fungerar gcc som länkare och sammanfogar objekten samtidigt som symboler mellan filer löses.

Den här gången använder ni inte -c, eftersom ni vill skapa ett färdigt program och inte ännu en objektfil.

gcc main.o math_utils.o -o app

Vad länkaren gör

Länkaren matchar varje användning av en symbol med dess definition.

När main.o anropar add hittar länkaren add-definitionen i math_utils.o och kopplar ihop dem. Den tar också med den kod från standardbiblioteket som programmet behöver.

Fel på grund av odefinierad referens

Om ni glömmer en objektfil vid länkningen kan länkaren inte hitta en definition och rapporterar en odefinierad referens.

Detta är ett länkfel, inte ett kompileringsfel: varje fil kompilerades utan problem, men en nödvändig definition saknades i det slutliga kommandot.

gcc main.o -o app
/* undefined reference to `add' */
/* fix: include math_utils.o */

Praktiska varningsflaggor

Kompilera alltid med varningar aktiverade. -Wall och -Wextra upptäcker möjliga fel tidigt.

Genom att lägga till -std=c11 väljer ni en språkstandard, så att beteendet blir förutsägbart mellan olika kompilatorer. Flaggorna fungerar både när ni kompilerar i ett steg och separat.

gcc -Wall -Wextra -std=c11 -c main.c
gcc -Wall -Wextra -std=c11 -c math_utils.c
gcc main.o math_utils.o -o app

Inkluderingssökvägar

När headerfiler finns i en annan katalog talar ni om för kompilatorn var den ska leta med -I.

Exempelvis lägger -Iinclude till mappen include/ i sökvägen, så att #include "math_utils.h" hittas även från en annan mapp.

gcc -Iinclude -c src/main.c -o build/main.o

Varför omkompilering är viktig

Separat kompilering är särskilt effektiv när bara en fil ändras. Ni kompilerar om objektfilen för den filen och länkar sedan om.

Om ni däremot redigerar en headerfil måste varje källfil som inkluderar den kompileras om, eftersom headerfilens text ingår i var och en av dem.

/* edited math_utils.c only */
gcc -c math_utils.c
gcc main.o math_utils.o -o app

Automatisera med make

Det blir tröttsamt att skriva kommandon för hand. En Makefile innehåller reglerna och bygger bara om det som har ändrats.

Det här minimala exemplet länkar två objektfiler till app; make använder filernas tidsstämplar för att avgöra vad som behöver kompileras om.

app: main.o math_utils.o
	gcc main.o math_utils.o -o app

main.o: main.c math_utils.h
	gcc -c main.c

Sammanfattning av hela bygget

Här är hela flödet för ett litet projekt, från objektfiler till ett färdigt program med aktiverade varningar.

Kompilera varje källfil och länka sedan objektfilerna. Kör resultatet för att bekräfta att allt fungerar från början till slut.

gcc -Wall -c main.c
gcc -Wall -c math_utils.c
gcc main.o math_utils.o -o app
./app

Snabbtest

Kontrollera era kunskaper om byggprocessen för flera filer.

Sammanfattning

Ni har lärt er att kompilera varje .c-fil till en objektfil med -c och sedan länka objektfilerna till ett program. Använd -Wall och -I för varningar och inkluderingssökvägar.

Odefinierade referenser betyder att en objektfil saknas vid länkningen. Verktyg som make automatiserar ombyggnaden av endast det som har ändrats.

Gratis att börja

Lär dig C med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
39
Lektioner
144

Vanliga frågor

Är lektionen ”Kompilera flera filer” gratis?

Ja – hela texten till ”Kompilera flera filer” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Kompilera flera filer”?

Bygg ett program med flera filer. Ni övar på C Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig C Academy?

Du behöver inga förkunskaper. Utbildningen i C Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Kompilera flera filer”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här C Academy-lektionen?

Ja. Varje C Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Header- och källkodsfiler
  2. Inkluderingsskydd
  3. extern och länkning
  4. Kompilera flera filer
← Tillbaka till C Academy