C Academy · Lektion

Statiska och delade bibliotek

Bygg och länka bibliotek.

Lektion 4 av 413 steg

Statiska och delade bibliotek ä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.

Vad ett bibliotek är

Ett bibliotek är en samling kompilerade objektfiler som Ni kan återanvända i flera program utan att kompilera om källkoden varje gång.

C har två typer:

  • Statiska bibliotek (.a) kopieras in i det körbara programmet vid länkningen
  • Delade bibliotek (.so) läses in vid körning

Bygga objektfiler

Båda typerna börjar med objektfiler. Kompilera källfilerna med -c som vanligt.

Dessa .o-filer är råmaterialet som arkiveraren eller länkaren paketerar.

gcc -c mathlib.c -o mathlib.o
gcc -c strlib.c -o strlib.o

Skapa ett statiskt bibliotek

Arkiveraren ar paketerar objektfiler till ett .a-arkiv. Det konventionella namnet är lib<name>.a.

Flaggorna betyder: r infoga, c skapa vid behov, s skriv ett index.

ar rcs libmymath.a mathlib.o strlib.o

Länka ett statiskt bibliotek

Länka med -L för sök katalogen och -l för biblioteksnamnet (ta bort prefixet lib och suffixet .a).

Den kod som behövs kopieras in i det körbara programmet, som sedan körs fristående.

gcc main.c -L. -lmymath -o app

Statiska biblioteks avvägningar

Statisk länkning är enkel och självförsörjande:

  • Det körbara programmet innehåller allt och har inget beroende vid körning
  • Men varje program som innehåller en kopia blir större
  • Om ett fel i biblioteket rättas måste alla program som använder det länkas om

Positionsoberoende kod

Delade bibliotek kan läsas in på valfri minnesadress, så deras kod måste vara positionsoberoende. Kompilera med -fPIC.

Detta genererar kod som använder relativ adressering i stället för fasta adresser.

gcc -fPIC -c mathlib.c -o mathlib.o
gcc -fPIC -c strlib.c -o strlib.o

Skapa ett delat bibliotek

Bygg .so-filen med -shared. Konventionen är lib<name>.so.

Till skillnad från ett statiskt arkiv är detta ett riktigt länkat objekt som laddaren kan mappa in vid körning.

gcc -shared mathlib.o strlib.o -o libmymath.so

Länka ett delat bibliotek

Länkningen ser likadan ut som i det statiska fallet. Skillnaden är att koden inte kopieras in; endast en referens sparas.

Det körbara programmet förblir litet, men är nu beroende av att hitta libmymath.so vid körning.

gcc main.c -L. -lmymath -o app

Hitta biblioteket vid körning

Vid starten söker den dynamiska laddaren efter .so-filen i standardsökvägarna. Ett bibliotek i den aktuella katalogen finns inte med i den listan.

Ange bibliotekets plats för laddaren med LD_LIBRARY_PATH (Linux) vid testning.

LD_LIBRARY_PATH=. ./app

Delade biblioteks avvägningar

Delade bibliotek byter enkelhet mot flexibilitet:

  • En kopia i minnet delas av många program, vilket sparar RAM och diskutrymme
  • En felrättning i .so-filen kommer alla program till godo utan omlänkning
  • Men programmet startar inte om .so-filen saknas eller är inkompatibel

Den sista risken är det klassiska problemet med "beroendehelvetet".

Inspektera beroenden

Två verktyg hjälper Er att se vad en binärfil länkas mot:

  • ldd app listar de delade bibliotek som laddaren behöver vid körning
  • nm libmymath.a listar symbolerna (funktionerna) i ett bibliotek

Om ldd visar 'not found' kan laddaren inte hitta den .so-filen i sin sökväg.

ldd app
nm libmymath.a

Snabb kontroll

Matcha flaggan med målet.

Sammanfattning

Nu kan Ni bygga och länka båda bibliotekstyperna:

  • Statiskt: ar rcs libX.a *.o, koden kopieras in i binärfilen, självförsörjande men större
  • Delat: kompilera med -fPIC, bygg med -shared, koden läses in vid körning
  • Länka båda med -L och -l; delade bibliotek behöver en sökväg vid körning, till exempel LD_LIBRARY_PATH

Nu har Ni hela verktygskedjan från förbehandling till bygge.

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 ”Statiska och delade bibliotek” gratis?

Ja – hela texten till ”Statiska och delade bibliotek” 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 ”Statiska och delade bibliotek”?

Bygg och länka bibliotek. 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 ”Statiska och delade bibliotek”?

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. Villkorlig kompilering
  2. Projekt med flera filer
  3. Makefiler
  4. Statiska och delade bibliotek
← Tillbaka till C Academy