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