Provided by: manpages-fr_3.57d1p1-1_all bug

NOM

       ld.so, ld-linux.so* - Chargeur et éditeur de liens dynamique

SYNOPSIS

       L'éditeur  de  liens dynamique peut être lancé indirectement en démarrant un programme lié
       dynamiquement ou une bibliothèque (dans ce cas, aucune option en ligne de commande ne peut
       être  transmise,  et  avec ELF, l'éditeur indiqué dans la section .interp du programme est
       exécuté), ou directement en lançant :

       /lib/ld-linux.so.* [OPTIONS] [PROGRAMME [ARGUMENTS]]

DESCRIPTION

       Les programmes ld.so et ld-linux.so* trouvent  et  chargent  les  bibliothèques  partagées
       nécessaires pour un programme, préparent son démarrage, et le lancent.

       Les  binaires  Linux  nécessitent  une  édition  de liens dynamique (au démarrage) sauf si
       l'option -static a été indiquée sur la ligne de commande de ld durant la compilation.

       Le programme ld.so traite les binaires a.out, un format utilisé il y  a  bien  longtemps ;
       ld-linux.so*  traitent les fichiers ELF (/lib/ld-linux.so.1 pour libc5, /lib/ld-linux.so.2
       pour glibc2), que tout le monde utilise depuis des années. Autrement, les deux  programmes
       ont  le  même comportement et utilisent les fichiers et programmes ldd(1), ldconfig(8)  et
       /etc/ld.so.conf.

       Lors de la résolution des dépendances  de  bibliothèques,  l'éditeur  de  liens  dynamique
       inspecte d'abord chaque chaîne de dépendance à la recherche d'une barre oblique (cela peut
       arriver si un chemin de bibliothèque contenant des barres obliques a été indiqué au moment
       du  lien). Si une barre oblique est trouvée, alors la chaîne de dépendance est interprétée
       comme un chemin (relatif ou absolu) et la bibliothèque est chargée en utilisant ce chemin.

       Si une dépendance de bibliothèque de  contient  pas  de  barre  oblique,  alors  elle  est
       recherchée dans l'ordre suivant :

       o  (ELF  seulement)  En  utilisant  les  répertoires  indiqués  dans l'attribut de section
          dynamique DT_RPATH du fichier binaire s'il est présent, et l'attribut DT_RUNPATH sinon.
          L'utilisation de DT_RPATH est déconseillée.

       o  En  utilisant  la  variable d'environnement LD_LIBRARY_PATH, sauf si les bits d'emprunt
          des identifiants d'utilisateur (setuid) ou de groupe (setgid) de l'exécutable sont  non
          nuls  (par  souci  de  simplification,  on  parlera  ci-dessous  d'exécutable setuid ou
          setgid), auquel cas elle est ignorée.

       o  (ELF seulement) En utilisant  les  répertoires  indiqués  dans  l'attribut  de  section
          dynamique DT_RUNPATH du fichier binaire s'il est présent.

       o  Depuis   le  fichier  cache  /etc/ld.so.cache,  qui  contient  une  liste  compilée  de
          bibliothèques précédemment trouvées dans  des  chemins  par  défaut.  Si  toutefois  le
          fichier  binaire a été lié avec l'option -z nodeflib de l'éditeur de liens, les chemins
          par défaut sont ignorés. Les bibliothèques installées dans les répertoires de  capacité
          matérielle (voir ci-dessous) sont préférées aux autres bibliothèques.

       o  Dans  le  répertoire  par  défaut  /lib,  puis  /usr/lib.  Si le binaire a été lié avec
          l'option -z nodeflib de l'éditeur de lien, cette étape est sautée.

   Développement des mots-clés rpath
       ld.so comprend certaines chaînes dans une spécification rpath (DT_RPATH  ou  DT_RUNPATH) ;
       ces chaines sont substituées ainsi :

       $ORIGIN (ou de manière équivalente ${ORIGIN})
              Ainsi, une application située dans un_répertoire/app peut être compilée avec

                  gcc -Wl,-rpath,'$ORIGIN/../lib'

              de sorte qu'elle trouvera une bibliothèque partagée associée dans un_répertoire/lib
              où que soit situé un_répertoire dans la hiérarchie du répertoire. Cela facilite  la
              création   d'applications  « prêtes  à  l'emploi »  qui  n'ont  pas  besoin  d'être
              installées dans un répertoire particulier mais peuvent au contraire être installées
              dans  n'importe  quel  répertoire  et  toujours trouver leurs propres bibliothèques
              partagées.

       $LIB (ou de manière équivalente ${LIB})
              Est développé en lib ou lib64 en fonction de l'architecture (par exemple lib64 pour
              x86-64 ou lib pour x86-32).

       $PLATFORM (ou de manière équivalente ${PLATFORM})
              Est  développé  en  une  chaîne correspondant au type de processeur du système hôte
              (par exemple "x86_64"). Pour certaines architectures, le noyau Linux ne fournit pas
              de  chaîne  de  caractère à l'éditeur de liens dynamique. La valeur de cette chaîne
              est issue de la valeur AT_PLATFORM du vecteur auxiliaire (voir getauxval(3)).

OPTIONS

       --list Liste les dépendances et leurs résolutions.

       --verify
              Vérifie que le programme est lié dynamiquement et que l'éditeur de  liens  peut  le
              traiter.

       --library-path CHEMIN
              Utiliser  CHEMIN  à  la  place de la variable d'environnement LD_LIBRARY_PATH (voir
              plus bas).

       --inhibit-rpath LISTE
              Ignorer les informations RPATH et RUNPATH dans les objets de la LISTE. Cette option
              est ignorée si ld.so est setuid ou setgid.

       --audit LISTE
              Utilisez les objets nommés dans LISTE comme auditeurs.

CAPACITÉS MATÉRIELLES

       Certaines  bibliothèques  sont  compilées  en  utilisant  des  instructions spécifiques au
       matériel qui n'existent pas sur tous les processeurs.  Ces  bibliothèques  devraient  être
       installées  dans  des  répertoires  dont  les  noms  définissent les capacités matérielles
       nécessaires, comme /usr/lib/sse2/. L'éditeur de liens dynamique compare ces répertoires au
       matériel  de  la  machine et sélectionne la version la mieux adaptée pour une bibliothèque
       donnée. Les répertoires de capacité matérielle peuvent être imbriqués  pour  combiner  les
       caractéristiques  du  microprocesseur.  La  liste  des noms de capacité matérielle pris en
       charge dépend du microprocesseur. Les noms suivants sont reconnus pour le moment.

       Alpha  ev4, ev5, ev56, ev6, ev67

       MIPS   loongson2e, loongson2f, octeon, octeon2

       PowerPC
              4xxmac, altivec, arch_2_05, arch_2_06, booke, cellbe,  dfp,  efpdouble,  efpsingle,
              fpu,  ic_snoop,  mmu,  notb, pa6t, power4, power5, power5+, power6x, ppc32, ppc601,
              ppc64, smt, spe, ucache, vsx

       SPARC  flush, muldiv, stbar, swap, ultra3, v9, v9v, v9v2

       s390   dfp, eimm, esan3, etf3enh, g5, highgprs, hpage,  ldisp,  msa,  stfle,  z900,  z990,
              z9-109, z10, zarch

       x86 (32 bits seulement)
              acpi,  apic,  clflush,  cmov, cx8, dts, fxsr, ht, i386, i486, i586, i686, mca, mmx,
              mtrr, pat, pbe, pge, pn, pse36, sep, ss, sse, sse2, tm

ENVIRONNEMENT

       Parmi les variables d'environnement importantes, on trouve :

       LD_ASSUME_KERNEL
              (glibc depuis 2.2.3) Toute bibliothèque partagée peut informer l'éditeur  de  liens
              dynamique  de  la  version  minimale  requise  de  l'ABI noyau. (Cette exigence est
              enregistrée dans une section de note ELF, qui peut être lue avec readelf -n sous le
              nom NT_GNU_ABI_TAG.) Lors de l'exécution, l'éditeur de liens dynamique détermine la
              version d'ABI du noyau exécuté et rejettera le  chargement  de  toute  bibliothèque
              partagée qui spécifie une version minimale d'ABI supérieure.

              LD_ASSUME_KERNEL  peut être utilisé afin que l'éditeur de liens dynamique considère
              qu'il est exécuté sur un système disposant d'une version différente de l'ABI noyau.
              Par  exemple,  la  commande suivante permet de considérer la version 2.2.5 du noyau
              Linux lors du chargement des bibliothèques partagées utilisées par monprogamme:

                  $ LD_ASSUME_KERNEL=2.2.5 ./monprogamme

              Lorsque plusieurs versions d'une même bibliothèque partagée (dans  des  répertoires
              différents  du  chemin  de recherche) spécifient des versions minimales d'ABI noyau
              différents, LD_ASSUME_KERNEL permet de sélectionner la version de la bibliothèque à
              utiliser  (ce  qui dépend de l'ordre de recherche des répertoires). Historiquement,
              LD_ASSUME_KERNEL était surtout utilisé pour sélectionner l'ancienne mise  en  œuvre
              des  threads  POSIX  par  LinuxThreads sur les systèmes fournissant LinuxThreads et
              NPTL (ce dernier étant généralement activé par défaut); voir pthreads(7).

       LD_BIND_NOT
              (glibc depuis 2.2) Ne pas mettre à jour les tables GOT (global offset table) et PLT
              (procedure linkage table) lors de la résolution d'un symbole.

       LD_BIND_NOW
              (libc5 ; glibc depuis 2.1.1) Si la chaîne est non vide, l'éditeur de liens résoudra
              tous les symboles au démarrage du programme plutôt que repousser la résolution  des
              noms  de  fonctions  au moment où elles sont référencées en premier. Ceci est utile
              dans un débogueur.

       LD_LIBRARY_PATH
              Comme la variable d'environnement  PATH,  cette  variable  contient  une  liste  de
              répertoires  séparés  par  des  deux-points.  Les  bibliothèques au format ELF sont
              recherchées à l'exécution dans ces répertoires. Ignorée dans les programmes  setuid
              ou setgid.

       LD_PRELOAD
              Une  liste  de  bibliothèques  ELF spécifiques à l'utilisateur, à charger avant les
              autres bibliothèques. Les éléments de la liste peuvent être séparés par des espaces
              ou  des  deux  points.  Cela  permet  de surcharger sélectivement les fonctions des
              autres  bibliothèques  partagées.  Les  bibliothèques  sont  recherchées  pour  une
              utilisation  des  règles  données  en  DESCRIPTION. Pour les binaires ELF setuid ou
              setgid, les chemins de préchargement contenant des barres obliques sont ignorés, et
              les  bibliothèques des répertoires standard ne sont chargées que si le bit de droit
              setuid est activé sur le fichier de bibliothèque.

       LD_TRACE_LOADED_OBJECTS
              (ELF seulement) Si la chaîne est non  vide,  le  programme  liste  ses  dépendances
              dynamiques comme s'il était lancé par ldd(1), au lieu du lancement normal.

       Il  existe  de nombreuses autres variables plus ou moins obscures, certaines obsolètes, ou
       réservées pour un usage interne.

       LD_AOUT_LIBRARY_PATH
              (libc5) Version de LD_LIBRARY_PATH pour les binaires a.out seulement. Les anciennes
              versions de ld-linux.so.1 supportent LD_ELF_LIBRARY_PATH.

       LD_AOUT_PRELOAD
              (libc5)  Version  de  LD_PRELOAD  pour  les binaires a.out seulement. Les anciennes
              versions de ld-linux.so.1 supportent LD_ELF_PRELOAD.

       LD_AUDIT
              (glibc depuis 2.4) Une liste d'objets partagés ELF spécifiés  par  l'utilisateur  à
              charger  avant tous les autres à l'intérieur d'un espace de nommage de l'éditeur de
              liens séparé (c'est-à-dire qu'il n'y aura pas d'interférence avec les liaisons  sur
              les  symboles  normaux  qui  auront  lieu  pendant le processus). Ces bibliothèques
              peuvent être utilisées pour auditer les  opérations  effectuées  par  l'éditeur  de
              liens dynamique. LD_AUDIT est ignorée pour les exécutables setuid ou setgid.

              L'éditeur  de  liens  dynamique  notifiera les bibliothèques d'audit à des endroits
              précis d'audit (appelés auditing checkpoints) — par  exemple  au  chargement  d'une
              nouvelle  bibliothèque, à la résolution d'un symbole, à l'appel d'un symbole depuis
              un autre objet partagé  — en appelant  la  fonction  adéquate  de  la  bibliothèque
              d'audit.   Pour   des   informations   plus  détaillées,  consultez  rtld-audit(7).
              L'interface d'audit est largement compatible avec  celle  disponible  sur  Solaris,
              décrite  dans  le  Linker  and Libraries Guide, au chapitre Runtime Linker Auditing
              Interface.

       LD_BIND_NOT
              (glibc depuis 2.1.95) Ne pas mettre à jour les tables GOT (global offset table)  et
              PLT (procedure linkage table) après résolution d'un symbole.

       LD_DEBUG
              (glibc  depuis  2.1)  Afficher  de nombreuses informations de débogage de l'éditeur
              dynamique. Si elle contient all, afficher tous les messages d'information, si  elle
              contient  help, afficher un message d'aide à propos des catégories de messages pour
              cette variable d'environnement. Depuis glibc 2.3.4,  LD_DEBUG  n'est  pas  pris  en
              compte pour les exécutables setuid ou setgid.

       LD_DEBUG_OUTPUT
              (glibc  depuis  2.1)  Fichier  où  la  sortie de LD_DEBUG devrait être envoyée. Par
              défaut, c'est la sortie d'erreur standard. LD_DEBUG_OUTPUT  est  ignorée  pour  les
              exécutables setuid ou setgid.

       LD_DYNAMIC_WEAK
              (glibc depuis 2.1.91) Autorise la surcharge des symboles faibles (retour à l'ancien
              comportement). Pour des raisons de sécurité, depuis  glibc  2.3.4,  LD_DYNAMIC_WEAK
              est ignorée pour les exécutables setuid ou setgid.

       LD_HWCAP_MASK
              (glibc depuis 2.1)  Masque des capacités matérielles.

       LD_KEEPDIR
              (a.out   seulement)(libc5)   Ne   pas  ignorer  le  répertoire  dans  les  noms  de
              bibliothèques a.out. Cette option est très déconseillée.

       LD_NOWARN
              (a.out seulement)(libc5) Supprimer les avertissements à  propos  des  bibliothèques
              a.out incompatibles avec les versions antérieures.

       LD_ORIGIN_PATH
              (glibc  depuis  2.1)  Chemin  où  se  trouve  l'exécutable (pour des programmes non
              setuid). Pour des raisons de sécurité, depuis glibc 2.4, LD_ORIGIN_PATH est ignorée
              pour les exécutables setuid ou setgid.

       LD_POINTER_GUARD
              (glibc depuis 2.4) Mettre à 0 pour supprimer la protection sur les pointeurs. Toute
              autre valeur active cette protection, ce qui est le  comportement  par  défaut.  La
              protection  sur  les  pointeurs  est un mécanisme de sécurité où certains pointeurs
              vers du code stocké dans la zone mémoire accessible en écriture (comme les adresses
              de  retour  conservées  par  setjmp(3),  ou des pointeurs de fonctions utilisés par
              diverses fonctions internes de glibc) sont modifiés semi-aléatoirement pour  rendre
              plus  difficile  une  utilisation  malveillante  par un intrus, qui utiliserait par
              exemple un dépassement de tampon ou de la pile.

       LD_PROFILE
              (glibc depuis 2.1) Objet partagé à profiler, spécifié par un chemin ou par  un  nom
              d'objet  partagé  (soname). Le résultat du profilage est écrit dans un fichier dont
              le nom est « $LD_PROFILE_OUTPUT/$LD_PROFILE.profile ».

       LD_PROFILE_OUTPUT
              (glibc depuis 2.1) Répertoire où sera écrit le résultat  de  LD_PROFILE.  Si  cette
              variable n'est pas définie, ou si elle est définie à une valeur vide, le défaut est
              /var/tmp. LD_PROFILE_OUTPUT est ignorée pour  les  exécutables  setuid  ou  setgid,
              auquel cas le répertoire utilisé sera toujours /var/profile.

       LD_SHOW_AUXV
              (glibc  depuis  2.1) Affiche les tableaux auxiliaires passés depuis le kernel. Pour
              des raisons de sécurité, depuis glibc 2.3.5,  LD_SHOW_AUXV  est  ignorée  pour  les
              exécutables setuid ou setgid.

       LD_USE_LOAD_BIAS
              Par  défaut,  c'est-à-dire  si cette variable n'est pas définie, les exécutables et
              les  objets  partagés  préchargés  (prelink)  respectent  l'adresse  de  base   des
              bibliothèques    dont    ils    dépendent,    alors   que   les   exécutables   PIE
              (position-independent executables) non préchargés et les autres objets partagés  ne
              les  respectent  pas.  Si  LD_USE_LOAD_BIAS est définie à une valeur non nulle, les
              exécutables et les PIE vont respecter les adresses de base. Si LD_USE_LOAD_BIAS est
              définie  à  0, ni les exécutables, ni les PIE ne respecteront les adresses de base.
              Cette variable est ignorée pour les exécutables setuid ou setgid.

       LD_VERBOSE
              (glibc depuis 2.1) S'il s'agit d'une chaîne non vide, afficher les informations sur
              la   version   des   objets   sur  le  programme  si  la  variable  d'environnement
              LD_TRACE_LOADED_OBJECTS a été définie.

       LD_WARN
              (ELF seulement)(glibc depuis 2.1.3) Si la  chaîne  est  non  vide,  avertir  si  un
              symbole n'est pas résolu.

       LDD_ARGV0
              (libc5) argv[0] à utiliser par ldd(1) si aucun n'est présent.

FICHIERS

       /lib/ld.so
              Le chargeur et éditeur de liens dynamique a.out.
       /lib/ld-linux.so.{1,2}
              Le chargeur et éditeur de liens dynamique ELF.
       /etc/ld.so.cache
              Fichier   contenant   la   liste  compilée  des  répertoires  où  se  trouvent  des
              bibliothèques, ainsi qu'une liste ordonnée de bibliothèques candidates.
       /etc/ld.so.preload
              Fichier contenant une liste de bibliothèques  ELF,  séparées  par  des  espaces,  à
              charger avant de démarrer le programme.
       lib*.so*
              Bibliothèques partagées.

NOTES

       Les  fonctionnalités  ld.so  sont disponibles pour les exécutables compilés à partir de la
       libc version 4.4.3 et ultérieures. Les fonctionnalités ELF sont disponibles depuis  1.1.52
       et la libc5.

VOIR AUSSI

       ldd(1), getauxval(3), rtld-audit(7), ldconfig(8), sln(8)

COLOPHON

       Cette  page  fait partie de la publication 3.57 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du  projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Christophe Blaess <http://www.blaess.fr/christophe/> (2003-2008).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>  ou  par  un  rapport  de  bogue   sur   le   paquet
       manpages-fr.

       Vous  pouvez  toujours  avoir  accès  à la version anglaise de ce document en utilisant la
       commande « man -L C <section> <page_de_man> ».