Statische en gedeelde bibliotheken
Bibliotheken bouwen en linken
Statische en gedeelde bibliotheken is een gratis C Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C Academy bevat in totaal 4 lessen.
Wat een bibliotheek is
Een bibliotheek is een verzameling gecompileerde objectbestanden die je in meerdere programma's kunt hergebruiken zonder de broncode telkens opnieuw te compileren.
C kent twee soorten:
- Statische bibliotheken (
.a) die tijdens het linken naar het uitvoerbare bestand worden gekopieerd - Gedeelde bibliotheken (
.so) die tijdens runtime worden geladen
Objectbestanden bouwen
Beide soorten beginnen met objectbestanden. Compileer je bronbestanden zoals gebruikelijk met -c.
Deze .o-bestanden zijn het ruwe materiaal dat de archiver of linker verpakt.
gcc -c mathlib.c -o mathlib.o
gcc -c strlib.c -o strlib.oEen statische bibliotheek maken
De archiver ar bundelt objectbestanden in een .a-archief. De gebruikelijke naam is lib<name>.a.
De opties betekenen: r invoegen, c indien nodig aanmaken, s een index schrijven.
ar rcs libmymath.a mathlib.o strlib.oEen statische bibliotheek linken
Link met -L voor de zoekmap en -l voor de bibliotheeknaam (laat het voorvoegsel lib en de uitgang .a weg).
De benodigde code wordt naar het uitvoerbare bestand gekopieerd, dat daarna zelfstandig werkt.
gcc main.c -L. -lmymath -o appAfwegingen bij statisch linken
Statisch linken is eenvoudig en zelfstandig:
- Het uitvoerbare bestand bevat alles en heeft geen runtime-afhankelijkheid
- Maar elk programma met een eigen kopie levert grotere binaire bestanden op
- Voor een bugfix in een bibliotheek moet je elk programma dat deze gebruikte opnieuw linken
Positie-onafhankelijke code
Gedeelde bibliotheken kunnen op elk geheugenadres worden geladen, dus hun code moet positie-onafhankelijk zijn. Compileer met -fPIC.
Dit genereert code die relatieve adressering gebruikt in plaats van vaste adressen.
gcc -fPIC -c mathlib.c -o mathlib.o
gcc -fPIC -c strlib.c -o strlib.oEen gedeelde bibliotheek maken
Bouw het .so-bestand met -shared. De gebruikelijke naam is lib<name>.so.
In tegenstelling tot een statisch archief is dit een echt gelinkt object dat de lader tijdens runtime kan toewijzen.
gcc -shared mathlib.o strlib.o -o libmymath.soEen gedeelde bibliotheek linken
Linken ziet er hetzelfde uit als bij de statische variant. Het verschil is dat de code niet wordt gekopieerd; alleen een verwijzing wordt vastgelegd.
Het uitvoerbare bestand blijft klein, maar is nu afhankelijk van het vinden van libmymath.so tijdens runtime.
gcc main.c -L. -lmymath -o appDe bibliotheek tijdens runtime vinden
Bij het opstarten zoekt de dynamische lader in standaardpaden naar het .so-bestand. De bibliotheek in de huidige map staat niet in die lijst.
Stuur de lader er met LD_LIBRARY_PATH naartoe (Linux) om te testen.
LD_LIBRARY_PATH=. ./appAfwegingen bij gedeeld linken
Gedeelde bibliotheken ruilen eenvoud in voor flexibiliteit:
- Eén kopie in het geheugen wordt door meerdere programma's gedeeld, wat RAM en schijfruimte bespaart
- Een bugfix in het
.so-bestand komt elk programma ten goede zonder opnieuw te linken - Maar het programma start niet als het
.so-bestand ontbreekt of incompatibel is
Dit laatste risico staat bekend als de klassieke 'afhankelijkheidshel'.
Afhankelijkheden inspecteren
Met twee hulpmiddelen kun je zien waartegen een binair bestand wordt gelinkt:
ldd apptoont de gedeelde bibliotheken die de lader tijdens runtime nodig heeftnm libmymath.atoont de symbolen (functies) in een bibliotheek
Als ldd 'not found' toont, kan de lader dat .so-bestand niet vinden in zijn zoekpad.
ldd app
nm libmymath.aKorte controle
Koppel de optie aan het doel.
Samenvatting
Je kunt nu beide soorten bibliotheken bouwen en linken:
- Statisch:
ar rcs libX.a *.o, code wordt naar het binaire bestand gekopieerd; zelfstandig maar groter - Gedeeld: compileer met
-fPIC, bouw met-shared, code wordt tijdens runtime geladen - Link beide met
-Len-l; gedeelde bibliotheken hebben een runtime-zoekpad nodig, zoalsLD_LIBRARY_PATH
Je beschikt nu over de volledige gereedschapsketen van preprocessor tot build.
Leer C met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 39
- Lessen
- 144
Veelgestelde vragen
Is de les “Statische en gedeelde bibliotheken” gratis?
Ja — de volledige tekst van “Statische en gedeelde bibliotheken” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C Academy bevat in totaal 4 lessen.
Wat leer ik in “Statische en gedeelde bibliotheken”?
Bibliotheken bouwen en linken Je oefent met C Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met C Academy te beginnen?
Ervaring vooraf is niet nodig. C Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Statische en gedeelde bibliotheken”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over C Academy?
Ja. Elke les over C Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Conditionele compilatie
- Projecten met meerdere bestanden
- Makefiles
- Statische en gedeelde bibliotheken