5. La bibliothèque C de GNU

L'étape suivante qui se produit au démarrage de votre ordinateur est le chargement d'init et son exécution. Cependant, init, comme la plupart des programmes, utilise des fonctions issues de bibliothèques.

Vous avez peut-être déjà vu un exemple de programme C comme celui-ci :

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

Le programme ne définit nullement printf, alors d'où vient-il ? Il provient des bibliothèques C standard. Pour un système GNU/Linux, il s'agit de glibc. Si vous les compilez sous Visual C++, alors il provient d'une mise en œuvre Microsoft de ces mêmes fonctions standard. Il existe des masses de ces fonctions standard, pour les mathématiques, la gestion des chaînes de caractères, de l'heure et de la date, des allocations de mémoire et ainsi de suite. Tout, dans Unix (y compris Linux) est soit écrit en C, soit doit faire de son mieux pour faire comme si, de sorte que tous les programmes utilisent ces fonctions.

Si vous jetez un œil dans /lib sur votre système Linux, vous verrez un grand nombre de fichiers appelés libquelquechose.so ou libquelquechose.a et cætera. Ce sont les bibliothèques de ces fonctions. Glibc est simplement la mise en œuvre GNU de ces fonctions.

Les programmes peuvent utiliser ces fonctions de deux manières. Si vous réalisez une édition de liens statique, ces fonctions seront copiées à l'intérieur de l'exécutable généré. C'est à cela que servent les bibliothèques libquelquechose.a. Si vous réalisez une édition de liens dynamique (cas par défaut), lorsque le programme aura besoin du code d'une bibliothèque, il l'appellera directement depuis le fichier libquelquechose.so

La commande ldd vous apporte une aide précieuse lorsque vous cherchez à retrouver les bibliothèques utilisées par un programme particulier. Par exemple, voici les bibliothèques utilisées par bash:

	[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. Configuration

Certaines fonctions des bibliothèques dépendent de la région géographique où vous vous trouvez. Par exemple, en français, on écrit les dates sous la forme jj/mm/aa, mais les américains les écrivent sous la forme mm/jj/aa. Ceci est configurable via un programme appelé localdef livré avec glibc.

5.2. Exercices

Utilisez ldd pour déterminer les bibliothèques qu'utilise votre application préférée.

Utilisez ldd pour déterminer les bibliothèques utilisées par init.

Créez une bibliothèque gadget, avec seulement une ou deux fonctions dedans. On utilise le programme ar pour les créer. La page de manuel d'ar pourrait être un bon point de départ pour commencer à enquêter sur la manière dont cette opération est effectuée. Écrivez, compilez, et liez un programme utilisant cette bibliothèque.

5.3. Aller plus loin