Next Previous Contents

5. De GNU C Library

Het volgende wat er gebeurt als je computer opstart is dat init wordt geladen en uitgevoerd. Echter init maakt zoals bijna alle programma's gebruik van functies uit library's.

Je hebt wellicht al eens een voorbeeldprogramma in C zoals het volgende gezien:

        main() {
                printf("Hello World!\n");
        }

Het programma bevat geen definitie van printf, dus waar komt het vandaan? Het komt uit de standaard C library's, op een GNU/Linux systeem, glibc. Als je het onder Visual C++ compileert, dan komt het uit een Microsoft implementatie met dezelfde standaardfuncties. Er zijn een onbepaald groot aantal van dergelijke standaardfuncties, voor berekeningen, tekenreeksen, datums/tijden, geheugentoekenning, enzovoort. Alles onder Unix (inclusief Linux) is of geschreven in C of heeft met veel moeite getracht het voor te doen alsof het zo is, dus iedereen maakt gebruik van deze functies.

Als je op je Linux systeem in /lib kijkt, dan zie je heel veel bestanden met de naam lib-en-nog-wat.so of lib-en-nog-wat.a enz. Het zijn library's met deze functies. Glibc is gewoon de GNU implementatie van deze functies.

Er zijn twee manieren waarop programma's deze libraryfuncties kunnen gebruiken. Als je een programma statisch linkt, dan worden deze libraryfuncties gekopieerd in het uitvoerbare bestand dat wordt aangemaakt. Hier zijn de lib-en-nog-wat.a library's voor. Link je een programma dynamisch (wat standaard gebeurt), dan wordt de librarycode aangeroepen door het programma zodra het programma deze code nodig heeft. Het wordt dan aangeroepen uit het lib-en-nog-wat.so bestand.

De opdracht ldd is je vriend wanneer je erachter wilt zien te komen welke library's nodig zijn voor een bepaald programma. Hier zijn bijvoorbeeld de library's waar bash gebruik van maakt:

        [greg@Curry power2bash]$ ldd /bin/bash
                libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000)
                libc.so.6 => /lib/libc.so.6 (0x4001d000)
                /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

5.1 Configuratie

De werking van een aantal functies in de library's hangen af van waar je je bevindt. In Australië schrijven we de datum bijvoorbeeld in de opmaak dd/mm/yy, maar Amerikanen schrijven het als mm/dd/yy. Er wordt een programma meegeleverd met de glibc distributie genaamd localedef die het je mogelijk maakt dit in te stellen.

5.2 Oefeningen

Gebruik ldd om uit te zoeken welke library's je favoriete toepassingen gebruiken.

Gebruik ldd om uit te zoeken welke library's init gebruikt.

Maak een library om mee te spelen, met daarin slechts één of twee functies. Het programma ar wordt gebruikt om ze aan te maken, de manpage van ar is wellicht een goed begin om te onderzoeken hoe dit werkt. Schrijf, compileer en link een programma dat gebruik maakt van deze library.

5.3 Meer informatie


Next Previous Contents