C Academy · Les

Statische en gedeelde bibliotheken

Bibliotheken bouwen en linken

Les 4 van 413 stappen

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.o

Een 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.o

Een 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 app

Afwegingen 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.o

Een 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.so

Een 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 app

De 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=. ./app

Afwegingen 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 app toont de gedeelde bibliotheken die de lader tijdens runtime nodig heeft
  • nm libmymath.a toont 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.a

Korte 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 -L en -l; gedeelde bibliotheken hebben een runtime-zoekpad nodig, zoals LD_LIBRARY_PATH

Je beschikt nu over de volledige gereedschapsketen van preprocessor tot build.

Gratis beginnen

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

  1. Conditionele compilatie
  2. Projecten met meerdere bestanden
  3. Makefiles
  4. Statische en gedeelde bibliotheken
← Terug naar C Academy