Page suivantePage pr�c�denteTable des mati�res

7. Chargement dynamique

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");
 }
}


Page suivantePage pr�c�denteTable des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:30