dlsym(3) Library Functions Manual dlsym(3) NOM dlsym, dlvsym - Obtenir l'adresse d'un symbole dans un objet ou executable partage BIBLIOTHEQUE Bibliotheque de liens dynamiques (libdl, -ldl) SYNOPSIS #include void *dlsym(void *restrict handle, const char *restrict symbol); #define _GNU_SOURCE #include void *dlvsym(void *restrict handle, const char *restrict symbol, const char *restrict version); DESCRIPTION La fonction dlsym() prend comme arguments un << descripteur >> d'un objet partage et charge dynamiquement renvoye par dlopen() et un nom de symbole termine par l'octet NULL final, et renvoie l'adresse ou ce symbole a ete charge en memoire. Si le symbole n'est pas trouve, soit dans l'objet specifie, soit dans n'importe quels objets charges automatiquement par dlopen() lorsque ces objets ont ete charges, dlsym() renvoie NULL. La recherche effectuee par dlsym() est d'abord en largeur a travers l'arbre des dependances de ces objets partages. Dans certains cas inhabituels (voir NOTES), le symbole peut vraiment avoir la valeur NULL. Par consequent, une valeur NULL renvoyee par dlsym() n'indique pas necessairement une erreur. La bonne maniere de distinguer une erreur d'un symbole ayant NULL pour valeur est d'appeler dlerror() pour effacer toute ancienne condition d'erreur, puis d'appeler dlsym() et enfin d'appeler dlerror() une nouvelle fois en sauvegardant sa valeur de retour dans une variable pour finalement verifier si la valeur sauvegardee n'est pas NULL. Il y a deux pseudo-descripteurs qui peuvent etre specifies dans handle : RTLD_DEFAULT Trouver la premiere occurence du symbole recherche en utilisant l'ordre de recherche par defaut pour objet partage. La recherche inclut les symboles globaux dans l'executable et ses dependances de meme que les symboles dans les objets partages charges dynamiquement avec le drapeau RTLD_GLOBAL. RTLD_NEXT Trouver la prochaine occurrence du symbole recherche dans l'ordre de recherche apres l'objet courant. Cela permet de fournir une enveloppe autour d'une fonction dans un autre objet partage de facon a ce que, par exemple, la definition d'une fonction dans un objet partage precharge (voir LD_PRELOAD dans ld.do(8)) peut trouver et invoquer la fonction << reelle >> fournie dans un autre objet partage (ou bien la << prochaine >> definition de la fonction dans les cas ou il y a plusieurs couches de prechargement). La macro de test de fonctionnalite _GNU_SOURCE doit etre definie pour obtenir les definitions de RTLD_DEFAULT et RTLD_NEXT depuis . La fonction dlvsym() effectue la meme chose que dlsym() mais prend une version sous forme de chaine comme argument supplementaire. VALEUR RENVOYEE En cas de succes, ces fonctions renvoient l'adresse associee au symbol. En cas d'erreur, elles renvoient NULL ; la cause de l'erreur peut etre diagnostiquee avec dlerror(3). ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |dlsym(), dlvsym() | Securite des threads | MT-Safe | +---------------------------------+--------------------------+---------+ STANDARDS dlsym() POSIX.1-2008. dlvsym() GNU. HISTORIQUE dlsym() glibc 2.0. POSIX.1-2001. dlvsym() glibc 2.1. NOTES Il y a plusieurs scenarios pour lesquels l'adresse d'un symbole global a la valeur NULL. Par exemple, un symbole peut etre place a l'adresse zero par l'editeur de liens via un script d'editeur de liens ou avec l'option en ligne de commande --defsym. Les symboles faibles non definis ont egalement NULL pour valeur. Enfin, la valeur du symbole peut etre le resultat d'une fonction de resolution de fonction indirecte GNU (IFUNC) qui renvoie NULL comme valeur de resolution. Dans ce dernier cas, dlsym() renvoie egalement NULL sans erreur. Cependant, dans les deux cas precedents, le comportement de l'editeur de liens dynamiques de GNU n'est pas uniforme : le traitement des relocalisations reussit et la valeur du symbole peut etre NULL, mais dlsym() echoue et dlerror() indique une erreur de recherche. Historique La fonction dlsym() fait partie de l'API de dlopen, derivee de SunOS. Ce systeme ne possede pas dlvsym(). EXEMPLES Consultez dlopen(3). VOIR AUSSI dl_iterate_phdr(3), dladdr(3), dlerror(3), dlinfo(3), dlopen(3), ld.so(8) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Gregoire Scano Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 dlsym(3)