Scroll to navigation

LD.SO(8) System Manager's Manual LD.SO(8)

NOM

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

DESCRIPTION

Le programme ld.so trouve et charge les bibliothèques partagées nécessaires pour un programme, prépare son démarrage, et le lance. À moins que l'option -static n'ait été indiquée sur la ligne de commande de ld durant la compilation, un binaire Linux n'est pas autonome et nécessite une édition de liens dynamique pendant son lancement.
Les bibliothèques partagées nécessaires à un programme sont recherchées consécutivement dans les endroits suivants :
o
En utilisant la variable d'environnement LD_LIBRARY_PATH ( LD_AOUT_LIBRARY_PATH pour le format a.out), sauf si l'exécutable est un binaire setuid ou setgid, auquel cas elle est ignorée.
o
Depuis le fichier cache /etc/ld.so.cache qui contient une liste compilée de bibliothèques candidates trouvées lors des exécutions précédentes dans les chemins de recherche. Les bibliothèques installées dans des répertoires de capacité matérielle (voir ci-dessous) sont préférées aux autres bibliothèques.
o
Dans les répertoires par défaut /lib, puis /usr/lib.

OPTIONS EN LIGNE DE COMMANDE

--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
Surcharge la variable d'environnement LD_LIBRARY_PATH (voir plus bas).
--ignore-rpath LISTE
Ignorer les informations RPATH et RUNPATH dans les objets de la LISTE. Cette option a été supportée par la glibc2 pendant environ une heure. Puis elle a été renommée en :
--inhibit-rpath LISTE

ENVIRONNEMENT

Il y a quatre variables d'environnement importantes.
LD_BIND_NOW
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. C'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.
LD_PRELOAD
Une liste de bibliothèques ELF (séparées par des blancs) spécifiques à l'utilisateur, à charger avant les autres bibliothèques. Cela permet de surcharger sélectivement les fonctions des autres bibliothèques partagées. Pour les binaires ELF setuid et setgid, seules les bibliothèques setgid des répertoires standards seront chargées.
LD_TRACE_LOADED_OBJECTS
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
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 a.out sont recherchées au démarrage dans ces répertoires.
LD_AOUT_PRELOAD
Le nom d'une bibliothèque a.out spécifique à l'utilisateur, à charger après les autres bibliothèques. Cela permet de surcharger sélectivement les fonctions des autres bibliothèques partagées.
LD_ASSUME_KERNEL
Chaque objet partagé dynamiquement (ou bibliothèque dynamique, ou DSO : « Dynamic Shared Object ») peut indiquer à l'éditeur de liens dynamique de la glibc quelle est la version minimale de l'ABI du système est nécessaire. Cette information est codée dans une section de note ELF souvent appelée « .note.ABI-tag ». Ceci permet de déterminer quelle bibliothèque charger quand plusieurs versions de la même bibliothèque sont installées sur le système. La variable d'environnement LD_ASSUME_KERNEL surcharge la version du noyau utilisée par l'éditeur de liens dynamique pour déterminer la bibliothèque à charger.
LD_AUDIT
Une liste d'objets partagés ELF indiqué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 contrôler 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
Ne pas mettre à jour les tables GOT (« global offset table ») et PLT (« procedure linkage table ») après une résolution de symbole.
LD_DEBUG
Afficher de nombreuses informations de débogage de l'éditeur dynamique. Si elle vaut all, afficher tous les messages d'information, si elle vaut help, afficher un message d'aide à propos des catégories que peuvent valoir cette variable d'environnement.
LD_DEBUG_OUTPUT
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 setuid ou setgid.
LD_DYNAMIC_WEAK
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_WARN
Masque des capacités matérielles.
LD_KEEPDIR
Ne pas ignorer le répertoire dans les noms de bibliothèques a.out. Cette option est très déconseillée.
LD_NOWARN
Supprimer les avertissements à propos des bibliothèques a.out incompatibles avec les numéros de versions mineures antérieures.
LD_ORIGIN_PATH
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
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
Objet partagé à profiler.
LD_PROFILE_OUTPUT
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
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
S'il s'agit d'une chaîne non vide, afficher les informations sur la version des objets pour lesquels on demande des informations sur le programme (si LD_TRACE_LOADED_OBJECTS a été configurée, ou si les options --list ou --verify ont été données à l'éditeur de liens dynamique).
LD_WARN
Si la chaîne est non vide, avertir si un symbole n'est pas résolu.

EXPANSION DES VARIABLES RPATH

L'éditeur fournit un nombre de variables qui peuvent être utilisées dans une spécification rpath ( DT_RPATH ou DT_RUNPATH).
$ORIGIN
ls.so comprend la chaîne $ORIGIN (ou de manière équivalente ${ORIGIN}) dans un rpath pour signifier le répertoire où se trouve l'exécutable de l'application. Une application située dans un répertoire toto/app peut être compilée avec « gcc -Wl,-rpath '$ORIGIN/../lib' » ; elle trouvera alors les bibliothèques partagées associées dans toto/lib quel que soit l'emplacement du répertoire toto dans le hiérarchie de fichiers.
$PLATFORM
La chaîne $PLATFORM (ou de manière équivalente ${PLATFORM}) dans un rpath est remplacé par le type de processeur de la machine actuelle. Notez que sur certaines architectures, le noyau Linux ne fournit pas de chaînes à l'éditeur de liens.
$LIB
La chaîne $LIB (ou de manière équivalente ${LIB}) dans un rpath correspond au répertoire des bibliothèques systèmes, qui est /lib sur les architectures GNU/Linux compatibles FHS.

CAPACITÉS MATÉRIELLES

Les bibliothèques peuvent être compilées en utilisant des instructions spécifiques au matériel qui n'existent pas pour tous les microprocesseurs. Ces bibliothèques doivent être installées dans des répertoires dont le nom définit une capacité matérielle comme /usr/lib/sse2/. L'éditeur de lien 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. Les capacités matérielles dépendent 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 (uniquement 32 bits)
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.

FICHIERS

/lib/ld.so
Le chargeur et éditeur de liens dynamique a.out.
/lib/ld-linux.so.*
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.
/etc/ld.so.nohwcap
Quand ce fichier est présent, l'éditeur de liens dynamique charge la version non optimisée de la bibliothèque, même si le processeur peut gérer la version optimisée.
lib*.so*
Bibliothèques partagées.

VOIR AUSSI

ldd(1), ldconfig(8).

BOGUES

Actuellement, ld.so ne peut pas enlever un lien existant pour chercher des bibliothèques compatibles ou plus récentes.
Les fonctionnalités de ld.so ne sont disponibles que pour des programmes compilés avec une libc 4.4.3 ou plus récente (NdT : les versions actuelles ont été renommées en glibc et le numéro de version a été réinitialisé).

AUTEURS

David Engel, Eric Youngdale, Peter MacDonald, Hongjiu Lu, Linus Torvalds, Lars Wirzenius et Mitch D'Souza (pas nécessairement dans cet ordre).

TRADUCTION

Cette page de manuel a été traduite par Christophe Blaess <ccb AT club-internet DOT fr> en 2003. La version présente dans Debian est maintenue par les membres de la liste <debian-l10n-french AT lists DOT debian DOT org>. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le paquet manpages-fr-extra.
26 mai 2007