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.