Statiska och delade bibliotek
Bygg och länka bibliotek.
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.oSkapa 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.oLä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 appStatiska 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.oSkapa 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.soLä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 appHitta 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=. ./appDelade 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 applistar de delade bibliotek som laddaren behöver vid körningnm libmymath.alistar 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.aSnabb 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
-Loch-l; delade bibliotek behöver en sökväg vid körning, till exempelLD_LIBRARY_PATH
Nu har Ni hela verktygskedjan från förbehandling till bygge.
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
- Villkorlig kompilering
- Projekt med flera filer
- Makefiler
- Statiska och delade bibliotek