7. Chargement dynamique

Contenu de cette section

Ce paragraphe est en fait un peu court : il sera étendu dans une version ultérieure dès que j'aurai récupéré le HowTo ELF

7.1 Concepts

Linux possède des bibliothèques dynamiques, comme on vous le répète depuis le début de ce document ! Or, il existe un système pour reporter le travail d'association des noms des symboles et de leur adresse dans la bibliothèque, qui est normalement effectué lors de l'édition de liens en l'effectuant lors du chargement du programme.

7.2 Messages d'erreur

Envoyez moi vos erreurs ! Je n'en fait pas grand chose sauf les insérer dans ce paragraphe...

can't load library: /lib/libxxx.so, Incompatible version

(seulement a.out) Cela signifie que vous n'avez pas la version correcte de la bibliothèque (numéro dit majeur). Non, il n'est pas possible d'effectuer un lien symbolique sur la bibliothèque que vous possédez : si vous avez de la chance, vous obtiendrez un segmentation fault. Récupérez la nouvelle version. Un message un peu équivalent existe également sur les systèmes ELF :

ftp: can't load library 'libreadline.so.2'

warning using incompatible library version xxx

(seulement a.out) Vous avez un numéro de version de bibliothèque (mineur) inférieur à la version avec laquelle a été compilé le programme. Le programme fonctionnera sûrement. Une mise à jour est toutefois conseillée.

7.3 Contrôler l'opération de chargement dynamique

Il existe certaines variables d'environnements que le chargeur dynamique utilise. Beaucoup sont exploitées par le programme ldd lorsqu'il s'agit de particularités de l'environnement de l'utilisateur, ce qui peuvent être positionnées pour lancer ldd avec des options particulières. Voici une description des différentes variables d'environnement que vous pouvez rencontrer :

7.4 Ecrire des programmes en utilisant le chargement dynamique

Cela ressemble énormément au système de chargement dynamique utilisé sous Solaris 2.x. Ce système est décrit d'une manière précise dans le document expliquant la programmation avec ELF écrit par H J Lu et dans la page de manuel dlopen(3), qui se trouve dans le paquetage ld.so. Voici un exemple simple : pensez à faire l'édition de liens avec -ldl

#include <dlfcn.h>
#include <stdio.h>

main()
{
  void *libc;
  void (*printf_call)();

  if(libc=dlopen("/lib/libc.so.5",RTLD_LAZY))
  {
    printf_call = dlsym(libc,"printf");
    (*printf_call)("Bonjour ! Ha ben ca marche pil poil sous Linux !\n");
  }

}


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre