Page suivante Page précédente Table des matières

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 ("standard C libraries"), sur un système GNU/Linux, glibc. Si vous les compilez sous Visual C++, alors il provient d'une implémentation Microsoft de ces mêmes fonctions standard. Il existe des milliers de ces fonctions standard, pour les mathématiques (math), la gestion des chaînes de caractères (string), l'heure et la date, l'allocation de mémoire et ainsi de suite. Tout, dans Unix (y compris Linux) est soit écrit en C, soit tente de le simuler, de sorte que tous les programmes utilisent ces fonctions.

Si vous jetez un oeil dans /lib sur votre système Linux, vous verrez un grand nombre de fichiers appelés libquelquechose.so ou libquelquechose.a etc. Ce sont les bibliothèques de ces fonctions. Glibc est simplement l'implémentation GNU de ces fonctions.

Les programmes peuvent utiliser ces fonctions de deux manières. si vous "linkez" (NDT : "éditez les liens", opération qui consiste à établir les relations avec les différents objets sollicités par le programme, puis à créer l'exécutable) statiquement, ces fonctions seront copiées à l'intérieur de l'exécutable généré. C'est à ça que servent les bibliothèques libquelquechose.a. Si vous linkez votre programme dynamiquement (effectué par défaut), lorsque le programme aura besoin du code d'une bibliothèque, il ira l'extraire directement du 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, dans leur bibliothèque, dépendent du lieu où vous vous trouvez. Par exemple, en français, on écrit les dates sous la forme dd/mm/yy, mais les américains les écrivent mm/dd/yy. Il existe un programme livré avec glibc appelé localdef qui vous donne la possibilité de définir cela.

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. Ecrivez, compilez, et linkez un programme utilisant cette bibliothèque.

5.3 Plus d'informations


Page suivante Page précédente Table des matières