Provided by: manpages-fr-dev_4.19.0-7_all bug

NOM

       dlsym, dlvsym - Obtenir l'adresse d'un symbole dans un objet ou exécutable partagé

BIBLIOTHÈQUE

       Bibliothèque de liens dynamiques (libdl, -ldl)

SYNOPSIS

       #include <dlfcn.h>

       void *dlsym(void *restrict handle, const char *restrict symbol);

       #define _GNU_SOURCE
       #include <dlfcn.h>

       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 partagé et chargé
       dynamiquement renvoyé par dlopen() et un nom de symbole terminé par l'octet NULL final, et
       renvoie  l'adresse  où ce symbole a été chargé en mémoire. Si le symbole n'est pas trouvé,
       soit dans l'objet spécifié, soit dans n'importe quels objets chargés  automatiquement  par
       dlopen()  lorsque ces objets ont été chargés, dlsym() renvoie NULL. La recherche effectuée
       par dlsym() est d'abord en largeur  à  travers  l'arbre  des  dépendances  de  ces  objets
       partagés.

       Dans certains cas inhabituels (voir NOTES), le symbole peut vraiment avoir la valeur NULL.
       Par conséquent, une valeur NULL renvoyée par  dlsym()  n'indique  pas  nécessairement  une
       erreur.  La bonne manière 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 vérifier si la valeur sauvegardée n'est pas NULL.

       Il y a deux pseudo-descripteurs qui peuvent être spécifiés dans handle :

       RTLD_DEFAULT
              Trouver la  première  occurence  du  symbole  recherché  en  utilisant  l'ordre  de
              recherche  par  défaut pour objet partagé. La recherche inclut les symboles globaux
              dans l'exécutable et ses dépendances de même  que  les  symboles  dans  les  objets
              partagés chargés dynamiquement avec le drapeau RTLD_GLOBAL.

       RTLD_NEXT
              Trouver  la  prochaine  occurrence  du  symbole recherché dans l'ordre de recherche
              après l'objet courant. Cela permet de fournir une enveloppe autour  d'une  fonction
              dans  un  autre  objet  partagé de façon à ce que, par exemple, la définition d'une
              fonction dans un objet partagé  préchargé  (voir  LD_PRELOAD  dans  ld.do(8))  peut
              trouver  et invoquer la fonction « réelle » fournie dans un autre objet partagé (ou
              bien la « prochaine » définition de la fonction dans les cas où il  y  a  plusieurs
              couches de préchargement).

       La  macro  de  test  de  fonctionnalité  _GNU_SOURCE  doit  être  définie pour obtenir les
       définitions de RTLD_DEFAULT et RTLD_NEXT depuis <dlfcn.h>.

       La fonction dlvsym() effectue la même chose que dlsym() mais prend une version sous  forme
       de chaîne comme argument supplémentaire.

VALEUR RENVOYÉE

       En  cas  de succès, ces fonctions renvoient l'adresse associée au symbol. En cas d'erreur,
       elles renvoient NULL ; la cause de l'erreur peut être diagnostiquée avec dlerror(3).

VERSIONS

       dlsym() est présente dans les versions 2.0  et  ultérieures  de  la  glibc.  dlvsym()  est
       apparue dans la version 2.1 de la glibc.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌────────────────────────────────────────────────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├────────────────────────────────────────────────────────┼──────────────────────┼─────────┤
       │dlsym(), dlvsym()                                       │ Sécurité des threads │ MT-Safe │
       └────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS

       POSIX.1-2001 décrit dlsym(). La fonction dlvsym() est une extension GNU.

NOTES

       Il  y  a plusieurs scenarios pour lesquels l'adresse d'un symbole global a la valeur NULL.
       Par exemple, un symbole peut être placé à l'adresse zéro par l'éditeur  de  liens  via  un
       script  d'éditeur  de  liens  ou avec l'option en ligne de commande --defsym. Les symboles
       faibles non définis ont également NULL pour valeur. Enfin, la valeur du symbole peut  être
       le  résultat  d'une  fonction  de résolution de fonction indirecte GNU (IFUNC) qui renvoie
       NULL comme valeur de résolution. Dans ce dernier cas, dlsym() renvoie également NULL  sans
       erreur.  Cependant,  dans  les  deux cas précédents, le comportement de l'éditeur de liens
       dynamiques de GNU n'est pas uniforme : le traitement des  relocalisations  réussit  et  la
       valeur  du  symbole peut être NULL, mais dlsym() échoue et dlerror() indique une erreur de
       recherche.

   Historique
       La fonction dlsym() fait partie de l'API de  dlopen,  dérivée  de  SunOS.  Ce  système  ne
       possède 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  française  de  cette  page  de  manuel  a  été créée par Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.rafin@laposte.net>,  Thierry
       Vignaud  <tvignaud@mandriva.com>,  François Micaux, Alain Portal <aportal@univ-montp2.fr>,
       Jean-Philippe   Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)    <jean-
       luc.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier  <barbier@debian.org>,  David  Prévot  <david@tilapin.org>   et   Grégoire   Scano
       <gregoire.scano@malloc.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.