LD.SO(8)

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

SYNOPSIS
L'éditeur de lien dynamique peut être lançé 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.

Les bibliothèques partagées nécessaires à un programme sont recherchées 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 l'exécutable est un binaire Set-UID ou Set-GID, 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.

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.

  $ORIGIN et rpath

ld.so comprend la chaîne $ORIGIN (ou de manière équivalente ${ORIGIN}) dans une spécification rpath (DT_RPATH ou DT_RUNPATH) comme indiquant le répertoire contenant l'exécutable de l'application. 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 un 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 à utiliser » qui n'ont pas besoin d'être installées dans un répertoire particulier mais au contraire être installées dans n'importe qul répertoire et toujours trouver leurs propres bibliothèques partagées.

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 PATH
    Surcharge 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.

ENVIRONNEMENT
Il y a quatre variables d'environnement importantes.

LD_LIBRARY_PATH
    Une liste de répertoires séparés par des points-virgules, dans lesquels les bibliothèques sont recherchées au démarrage. Comme la variable d'environnement PATH.

LD_PRELOAD
    Une liste, séparée par des espaces, de bibliothèques ELF spécifiques à l'utilisateur, à charger avant les autres bibliothèques. Ceci permet de surcharger sélectivement les fonctions des autres bibliothèques partagées. Pour les binaires ELF Set-UID/Set-GID, seules les bibliothèques Set-UID des répertoires standard seront chargées.

LD_BIND_NOW
    (libc5 ; glibc depuis 2.1.1) Si la chaîne est non vide, l'éditeur de lien 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_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ésevées pour un usage interne.

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.

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

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.

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 standard. LD_DEBUG_OUTPUT est ignorée pour les binaires Set-UID/Set-GID.

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 lesquels on demande des informations sur le programme (si LD_TRACE_LOADED_OBJECTS a été configuré, ou si les options --list ou --verify ont été données à l'éditeur de liens dynamiques).

LD_PROFILE
    (GlicC depuis 2.1) Activer le suivi des objets partagés.

LD_PROFILE_OUTPUT
    (glibc depuis 2.1) Fichier où la sortie de LD_PROFILE est envoyée. Par défaut, c'est la sortie standard. LD_PROFILE_OUTPUT est ignoré pour les binaires Set-UID/Set-GID.

LD_AOUT_LIBRARY_PATH
    (LibC5) Version de LD_LIBRARY_PATH pour les binaire 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_SHOW_AUXV
    (glibc depuis 2.1) Afficher les tables auxiliaires passées au noyau.

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

LD_ORIGIN_PATH
    (glibc depuis 2.1) Chemin du fichier binaire (pour les programmes non Set-UID).

LD_DYNAMIC_WEAK
    (glibc depuis 2.1.91) Autorise la surcharge des symboles faibles (retour à l'ancien comportement).

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.

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

FICHIERS
/lib/ld.so
    Le chargeur/éditeur de lien a.out.
/lib/ld-linux.so.{1,2}
    Le chargeur/éditeur de liens ELF.
/etc/ld.so.cache
    Fichier contenant la liste compilée des répertoires où des bibliothèques se trouvent.
/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), ldconfig(8)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 25 juillet 2003 et révisée le 17 juillet 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 8 ld.so ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.