Charger une bibliothèque de manière dynamique

Problème

Vous souhaitez charger une bibliothèque de manière dynamique, c’est-à-dire seulement au moment choisi et non pas automatiquement au lancement du programme.

Solution

Utilisez dlopen().

Discussion

La fonction dlopen() s’utilise comme d’autres fonctions habituelles d’ouverture de fichiers. Son premier argument est en effet le nom du fichier contenant la bibliothèque dynamique à ouvrir et le deuxième argument comprend les modes et options d’ouverture. Le choix est assez restreint pour le mode. La seule différence entre RTLD_LAZY et RTLD_NOW réside dans l’indication que les symboles contenus dans la bibliothèque sont résolus. Ils le sont au besoin pour le premier, ce qui est préférable pour des raisons de performances, ou dès l’ouverture de la bibliothèque pour le second, ce qui permet de découvrir tous les symboles indéfinis dès l’ouverture. Deux options supplémentaires sont disponibles. RTLD_GLOBAL permet à d’autres objets d’utiliser les symboles de la bibliothèque pour résoudre des références indéfinies dans ces objets, alors que RTLD_LOCAL l’en empêche.

Lors de l’ouverture d’une bibliothèque partagée, le système recherche une fonction nommée _init() afin de l’exécuter si elle existe. Cette fonction permet certaines...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Créer et utiliser une bibliothèque avec les outils GNU
Suivant
Lancer une fonction d'une bibliothèque dynamique