ld.so
Table des matières
Retour à l'index
NOM
ld.so, ld-linux.so - Chargeur et éditeur de liens dynamiques
SYNOPSIS
L'éditeur de liens dynamiques peut être lancé indirectement en démarrant un
programme lié dynamiquement ou un objet partagé (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 objets
partagés (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 dynamiques (au
démarrage) sauf si l'option -static a été indiquée sur la ligne de
commande de ld(1) durant la compilation.
Le programme ld.so traite les binaires a.out, un format utilisé il y a
bien longtemps. Le programme ld-linux.so* (/lib/ld-linux.so.1 pour
libc5, /lib/ld-linux.so.2 pour glibc2) traite les binaires qui sont au
format ELF plus moderne. Les deux programmes ont le même comportement et
utilisent les mêmes fichiers d’aide et mêmes programmes (ldd(1),
ldconfig(8) et /etc/ld.so.conf).
Lors de la résolution des dépendances d’objets partagés, l'éditeur de liens
dynamiques inspecte d'abord chaque chaîne de dépendance à la recherche d'une
barre oblique (cela peut arriver si un chemin d’objet partagé contenant des
barres obliques a été indiqué au moment de la liaison). 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 l’objet partagé est chargé en utilisant ce chemin.
Si une dépendance d’objet partagé ne contient pas de barre oblique, alors
elle est recherchée dans l'ordre suivant :
- (1)
-
Using the directories specified in the DT_RPATH dynamic section attribute of
the binary if present and DT_RUNPATH attribute does not exist.
- (2)
-
En utilisant la variable d'environnement LD_LIBRARY_PATH, sauf si
l’exécutable est utilisé dans le mode d’exécution sécurisée (consulter
ci-dessous), auquel cas elle est ignorée.
- (3)
-
En utilisant les répertoires indiqués dans l’attribut de la section
dynamique DT_RUNPATH du binaire s’il est présent. De tels répertoires sont
recherchés uniquement pour trouver ces objets requis par les entrées
DT_NEEDED (dépendances directes) et ne s’appliquent pas aux enfants des
objets qui doivent eux-mêmes avoir leurs propres entrées DT_RUNPATH. Cela
est différent de DT_RPATH, qui est appliqué aux recherches pour tous les
enfants dans l’arbre de dépendances.
- (4)
-
From the cache file /etc/ld.so.cache, which contains a compiled list of
candidate shared objects previously found in the augmented library path.
If, however, the binary was linked with the -z nodefaultlib linker
option, shared objects in the default paths are skipped. Shared objects
installed in hardware capability directories (see below) are preferred to
other shared objects.
- (5)
-
In the default path /lib, and then /usr/lib. (On some 64-bit
architectures, the default paths for 64-bit shared objects are /lib64,
and then /usr/lib64.) If the binary was linked with the -z nodefaultlib linker option, this step is skipped.
Mots-clés de chaîne dynamiques
Dans plusieurs emplacements, l’éditeur de liens dynamiques développe les
mots-clés de chaîne dynamiques
- -
-
dans les variables d’environnement LD_LIBRARY_PATH, LD_PRELOAD et
LD_AUDIT ;
- -
-
dans les valeurs des mots-clés de la section dynamique DT_NEEDED,
DT_RPATH, DT_RUNPATH, DT_AUDIT et DT_DEPAUDIT des binaires ELF ;
- -
-
dans les arguments des options de ld.so dans la ligne de commande
--audit, --library-path et --preload (consulter ci-dessous) ;
- -
-
dans les arguments de nom de fichier pour les fonctions dlopen(3) et
dlmopen(3).
Les mots-clés substitués sont comme suit :
- $ORIGIN (ou de manière équivalente ${ORIGIN})
-
Cela développe le répertoire contenant le programme ou l’objet
partagé. 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 objet partagé associé dans un_répertoire/lib
où que soit situé un_répertoire dans la hiérarchie de répertoires. 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 objets partagés.
- $LIB (ou de manière équivalente ${LIB})
-
Cela se développe 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})
-
Cela se développe 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 plateforme à l'éditeur de liens
dynamiques. La valeur de cette chaîne est issue de la valeur AT_PLATFORM
du vecteur auxiliaire (consulter getauxval(3)).
Remarquez que les mots-clés de chaîne dynamiques doivent être mis entre
parenthèses correctement lorsqu’ils sont définis à partir de l’interpréteur
de commandes pour prévenir de leur développement en tant que variables de
l’interpréteur ou d’environnement.
OPTIONS
- --argv0 string (since glibc 2.33)
-
Set argv[0] to the value string before running the program.
- --audit liste
-
Utiliser les objets nommés dans liste comme vérificateurs. Les objets
sont délimités par des deux-points.
- --glibc-hwcaps-mask list
-
only search built-in subdirectories if in list.
- --glibc-hwcaps-prepend list
-
Search glibc-hwcaps subdirectories in list.
- --inhibit-cache
-
Ne pas utiliser /etc/ld.so.cache.
- --library-path chemin
-
Utiliser chemin au lieu du réglage de la variable d’environnement
LD_LIBRARY_PATH (consulter ci-dessous). Les noms ORIGIN, LIB et
PLATFORM sont interprétés comme pour la variable d’environnement
LD_LIBRARY_PATH.
- --inhibit-rpath liste
-
Ignorer les informations de RPATH et RUNPATH dans les noms d’objet dans
liste. Cette option est ignorée dans le mode d’exécution sécurisée (voir
ci-dessous). Les objets dans liste sont séparés par des deux-points ou
des espaces.
- --list
-
Lister les dépendances et la manière de les résoudre.
- --list-diagnostics (since glibc 2.33)
-
Print system diagnostic information in a machine-readable format, such as
some internal loader variables, the auxiliary vector (see getauxval(3)),
and the environment variables. On some architectures, the command might
print additional information (like the cpu features used in GNU indirect
function selection on x86). --list-tunables (since glibc 2.33) Print
the names and values of all tunables, along with the minimum and maximum
allowed values.
- --preload liste (depuis la glibc 2.30)
-
Précharger les objets indiqués dans liste. Ces objets sont délimités par
des deux-points ou des espaces. Les objets sont préchargés comme c’est
expliqué dans la description de la variable d’environnement LD_PRELOAD
ci-dessous.
-
Au contraire avec LD_PRELOAD, l’option --preload fournit une façon de
réaliser le préchargement pour un exécutable unique sans affecter le
préchargement réalisé par un processus enfant qui exécute un nouveau
programme.
- --verify
-
Vérifier que le programme est lié dynamiquement et que l'éditeur de liens
peut le traiter.
ENVIRONNEMENT
Diverses variables d’environnement influencent les opérations de l’éditeur
de liens dynamiques.
Mode d’exécution sécurisée
For security reasons, if the dynamic linker determines that a binary should
be run in secure-execution mode, the effects of some environment variables
are voided or modified, and furthermore those environment variables are
stripped from the environment, so that the program does not even see the
definitions. Some of these environment variables affect the operation of
the dynamic linker itself, and are described below. Other environment
variables treated in this way include: GCONV_PATH, GETCONF_DIR,
HOSTALIASES, LOCALDOMAIN, LD_AUDIT, LD_DEBUG,
LD_DEBUG_OUTPUT, LD_DYNAMIC_WEAK, LD_HWCAP_MASK,
LD_LIBRARY_PATH, LD_ORIGIN_PATH, LD_PRELOAD, LD_PROFILE,
LD_SHOW_AUXV, LOCALDOMAIN, LOCPATH, MALLOC_TRACE, NIS_PATH,
NLSPATH, RESOLV_HOST_CONF, RES_OPTIONS, TMPDIR, and TZDIR.
Un binaire est exécuté dans le mode d’exécution sécurisée si l’entrée
AT_SECURE dans le vecteur auxiliaire (consulter getauxval(3)) à une
valeur différente de zéro. Cette entrée peut avoir une valeur différente de
zéro pour différentes raisons, dont :
- -
-
Les ID utilisateur réels et effectifs du processus diffèrent ou les ID de
groupe réels et effectifs diffèrent. Cela se produit classiquement lors de
l’exécution d’un programme set-user-ID ou set-group-ID ;
- -
-
Un processus avec un ID utilisateur non superutilisateur a exécuté un
binaire qui conférait des capacités au processus ;
- -
-
Une valeur différente de zéro pouvait avoir été réglée par un module de
sécurité de Linux.
Variables d'environnement
Parmi les variables d'environnement importantes, on trouve :
- LD_ASSUME_KERNEL (from glibc 2.2.3 to glibc 2.36)
-
Each shared object can inform the dynamic linker of the minimum kernel ABI
version that it requires. (This requirement is encoded in an ELF note
section that is viewable via readelf -n as a section labeled
NT_GNU_ABI_TAG.) At run time, the dynamic linker determines the ABI
version of the running kernel and will reject loading shared objects that
specify minimum ABI versions that exceed that ABI version.
-
LD_ASSUME_KERNEL peut être utilisé afin que l'éditeur de liens dynamiques
considère qu'il est exécuté sur un système disposant d'une version
différente de l'ABI du noyau. Par exemple, la commande suivante permet de
considérer la version 2.2.5 du noyau Linux lors du chargement des objets
partagés utilisés par monprogamme:
-
$ LD_ASSUME_KERNEL=2.2.5 ./monprogamme
-
Lorsque plusieurs versions d’un même objet partagé (dans des répertoires
différents du chemin de recherche) spécifient des versions minimales d'ABI
du noyau différentes, LD_ASSUME_KERNEL permet de sélectionner la version
de l’objet à utiliser (ce qui dépend de l'ordre de recherche des
répertoires).
-
Historiquement, LD_ASSUME_KERNEL était surtout utilisée 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) ; consulter pthreads(7).
- LD_BIND_NOW (depuis la glibc 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. Cela est utile
dans un débogueur.
- LD_LIBRARY_PATH
-
Une liste de répertoires dans lesquels chercher les bibliothèques ELF au
moment de l’exécution. Les éléments de la liste sont séparés par des
deux-points ou des points-virgules et il n’existe aussi aucune protection
des séparateurs. Un nom de répertoire de longueur nulle indique le
répertoire de travail en cours.
-
Cette variable est ignorée dans le mode d’exécution sécurisée.
-
À l’intérieur des noms de chemin indiqués dans LD_LIBRARY_PATH, l’éditeur
de liens dynamiques développe les mots-clés $ORIGIN, $LIB et
$PLATFORM (ou les versions utilisant des accolades autour des noms) comme
cela est décrit ci-dessus dans Mots-clés de chaine dynamiques. Par
conséquent, par exemple, ce qui suit provoquera la recherche d’une
bibliothèque dans les sous-répertoires lib ou lib64 en dessous du
répertoire contenant le programme à exécuter :
-
$ LD_LIBRARY_PATH='$ORIGIN/$LIB' prog
-
Remarquez l’utilisation de guillemets simples empêchant le développement de
$ORIGIN et $LIB en tant que variables d’interpréteur.
- LD_PRELOAD
-
Une liste complémentaire, spécifiée par l’utilisateur, d’objets partagés ELF
à charger avant tous les autres objets. Cela permet de surcharger
sélectivement les fonctions dans les autres objets partagés.
-
Les éléments de la liste peuvent être séparés par des deux-points ou des
espaces et il n’existe aussi aucune protection des séparateurs. Les objets
sont recherchés en utilisant les règles précisées dans DESCRIPTION et sont
ajoutés dans le mappage de liens dans l’ordre de droite à gauche indiqué
dans la liste.
-
Dans le mode d’exécution sécurisée, le préchargement de noms de chemin
contenant des barres obliques est ignoré. Par ailleurs, les objets partagés
sont préchargés seulement à partir des répertoires de recherche standard et
seulement si le bit de mode set-user-ID est activé (ce qui n’est pas
habituel).
-
À l’intérieur des noms indiqués dans LD_PRELOAD, l’éditeur de liens
dynamiques développe les mots-clés $ORIGIN, $LIB et $PLATFORM (ou
les versions utilisant des accolades autour des noms) comme cela est décrit
ci-dessus dans Mots-clés de chaine dynamiques. (Voir aussi le point sur
la mise entre parenthèses dans la description de LD_LIBRARY_PATH.)
-
Il existe diverses méthodes pour préciser les bibliothèques à précharger, et
celles-ci sont gérées dans l’ordre suivant :
-
- (1)
-
La variable d’environnement LD_PRELOAD.
- (2)
-
L’option --preload de ligne de commande lors de l’invocation directe de
l’éditeur de liens dynamiques.
- (3)
-
Le fichier /etc/ld.so.preload (décrit ci-dessous).
- 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_AUDIT (depuis la glibc 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 distinct de nommage de l'éditeur
de liens (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 objets
peuvent être utilisés pour contrôler les opérations effectuées par l'éditeur
de liens dynamiques. Les éléments de la liste sont séparés par des
deux-points et il n’existe aucune protection des séparateurs.
-
LD_AUDIT est ignorée dans le mode d’exécution sécurisée.
-
The dynamic linker will notify the audit shared objects at so-called
auditing checkpoints---for example, loading a new shared object, resolving
a symbol, or calling a symbol from another shared object---by calling an
appropriate function within the audit shared object. For details, see
rtld-audit(7). The auditing interface is largely compatible with that
provided on Solaris, as described in its Linker and Libraries Guide, in
the chapter Runtime Linker Auditing Interface.
-
À l’intérieur des noms indiqués dans LD_AUDIT, l’éditeur de liens
dynamiques développe les mots-clés $ORIGIN, $LIB et $PLATFORM (ou
les versions utilisant des accolades autour des noms) comme cela est décrit
ci-dessus dans Mots-clés de chaine dynamiques. (Voir aussi le point sur
la mise entre parenthèses dans la description de LD_LIBRARY_PATH.)
-
Depuis la glibc 2.13, dans le mode d’exécution sécurisée, les noms dans la
liste de contrôle contenant des barres obliques sont ignorés et seulement
les objets partagés des répertoires de recherche standard ayant le bit de
mode set-user-ID activé sont chargés.
- LD_BIND_NOT (depuis la glibc 2.1.95)
-
Si cette variable d’environnement est réglée à une valeur non vide, ne pas
mettre à jour les tables GOT (global offset table) et PLT (procedure linkage
table) après la résolution d’un symbole de fonction. En combinant
l’utilisation de cette variable avec LD_DEBUG (avec les catégories
bindings et symbols), les liaisons de fonctions d’exécution peuvent
être observées.
- LD_DEBUG (depuis la glibc 2.1)
-
Produire une information détaillée de débogage dans l’éditeur de liens
dynamiques. Le contenu de cette variable est composée d’une ou de plusieurs
des catégories suivantes, séparées par des deux-points, des virgules ou (si
la valeur est entre guillemets) par des espaces :
-
- help
-
Indiquer help dans la valeur de cette variable fait que le programme
n’est pas exécuté et qu’un message est affiché sur les catégories pouvant
être indiquées dans cette variable d’environnement.
- all
-
Afficher toutes les informations de débogage (exceptées statistics et
unused ; consulter ci-dessous).
- bindings
-
Afficher des informations sur la définition à laquelle chaque symbole est
lié.
- files
-
Afficher l’avancement pour le fichier d’entrée.
- libs
-
Afficher les chemins de recherche de bibliothèque.
- reloc
-
Afficher le traitement de relocalisation
- scopes
-
Afficher des informations de portée.
- statistics
-
Afficher des statistiques de relocalisation.
- symbols
-
Afficher les chemins de recherche pour chaque consultation de symbole.
- unused
-
Identifier les objets partagés dynamiques non utilisés.
- versions
-
Afficher les dépendances de version.
-
Depuis la glibc 2.3.4, LD_DEBUG est ignorée dans le mode d’exécution
sécurisée à moins que le fichier /etc/suid-debug existe (le contenu du
fichier est non pertinent).
- LD_DEBUG_OUTPUT (depuis la glibc 2.1)
-
Par défaut, la sortie de LD_DEBUG est écrite sur la sortie d’erreur
standard. Si LD_DEBUG_OUTPUT est définie, alors la sortie est écrite
selon le chemin défini dans sa valeur avec le suffixe « . » (point) suivi
par l’ID du processus ajouté au chemin.
-
LD_DEBUG_OUTPUT est ignorée dans le mode d’exécution sécurisée.
- LD_DYNAMIC_WEAK (depuis la glibc 2.1.91)
-
Par défaut, lors de la recherche de bibliothèques partagées pour résoudre
une référence de symbole, l’éditeur de liens dynamiques résoudra la première
définition qu’il trouvera.
-
Old glibc versions (before glibc 2.2), provided a different behavior: if the
linker found a symbol that was weak, it would remember that symbol and keep
searching in the remaining shared libraries. If it subsequently found a
strong definition of the same symbol, then it would instead use that
definition. (If no further symbol was found, then the dynamic linker would
use the weak symbol that it initially found.)
-
L’ancien comportement de la glibc n’était pas normalisé. (La pratique
normalisée consiste à ce que la distinction entre les symboles faibles et
forts intervient seulement au moment de la liaison statique.) Dans la
glibc 2.2, l’éditeur de liens dynamiques a été modifié pour fournir le
comportement actuel (qui était le comportement fourni par la plupart des
autres implémentations à ce moment là).
-
Définir la variable d’environnement LD_DYNAMIC_WEAK (à n’importe quelle
valeur) conduit à l’ancien comportement de la glibc non normalisé, selon
lequel un symbole faible dans une bibliothèque partagée peut être écrasé par
un symbole fort trouvé ultérieurement dans une autre bibliothèque
partagée. Remarquez que même si cette variable est définie, un symbole fort
dans une bibliothèque partagée n’écrasera pas une définition faible du même
symbole dans le programme principal.)
-
Depuis la glibc 2.3.4, LD_DYNAMIC_WEAK est ignorée dans le mode
d’exécution sécurisée.
- LD_HWCAP_MASK (from glibc 2.1 to glibc 2.38)
-
Mask for hardware capabilities. Since glibc 2.26, the option might be
ignored if glibc does not support tunables.
- LD_ORIGIN_PATH (depuis la glibc 2.1)
-
Chemin où le binaire est trouvé.
-
Depuis la glibc 2.4, LD_ORIGIN_PATH est ignorée dans le mode d’exécution
sécurisée.
- LD_POINTER_GUARD (from glibc 2.4 to glibc 2.22)
-
Mettre à zéro 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. Depuis la glibc 2.23, LD_POINTER_GUARD ne peut plus
être utilisée pour désactiver cette protection, qui est toujours activée.
- LD_PROFILE (depuis la glibc 2.1)
-
The name of a (single) shared object to be profiled, specified either as a
pathname or a soname. Profiling output is appended to the file whose name
is: $LD_PROFILE_OUTPUT/$LD_PROFILE.profile.
-
Since glibc 2.2.5, LD_PROFILE uses a different default path in
secure-execution mode.
- LD_PROFILE_OUTPUT (depuis la glibc 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 is ignored in secure-execution mode; instead
/var/profile is always used.
- LD_SHOW_AUXV (depuis la glibc 2.1)
-
Si cette variable d’environnement est définie (à n’importe quelle valeur),
afficher le tableau auxiliaire transmis à partir du noyau (consulter aussi
getauxval(3)).
-
Depuis la glibc 2.3.4, LD_SHOW_AUXV est ignorée dans le mode d’exécution
sécurisée.
- LD_TRACE_PRELINKING (from glibc 2.4 to glibc 2.35)
-
Si cette variable d’environnement est définie, tracer la pré-liaison de
l’objet dont le nom est assigné à cette variable d’environnement. (Utiliser
ldd(1) pour obtenir une liste des objets pouvant être tracés.) Si le nom
d’objet n’est pas reconnu, alors l’activité de pré-liaison est tracée.
- LD_USE_LOAD_BIAS (from glibc 2.3.3 to glibc 2.35)
-
Par défaut, c'est-à-dire si cette variable n'est pas définie, les
exécutables et les objets partagés pré-liés (prelink) respectent les
adresses de base des objets partagés dont ils dépendent, alors que les
exécutables PIE (position-independent executables) non pré-liés et les
autres objets partagés ne les respectent pas. Si LD_USE_LOAD_BIAS est
définie à la valeur 1, 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.
-
Depuis la glibc 2.3.3, cette variable est ignorée dans le mode d’exécution
sécurisée.
- LD_VERBOSE (depuis la glibc 2.1)
-
S'il s'agit d'une chaîne non vide, afficher les informations sur la version
des symboles du programme si la variable d'environnement
LD_TRACE_LOADED_OBJECTS a été définie.
- LD_WARN (depuis la glibc 2.1.3)
-
Si la chaîne est non vide, avertir si un symbole n'est pas résolu.
- LD_PREFER_MAP_32BIT_EXEC (x86-64 seulement ; depuis la glibc 2.23)
-
Selon le guide d’optimisation logicielle de Silvermont d’Intel, pour les
applications 64 bits, les performances de prédiction de branchement peuvent
être détériorées quand la cible d’un branchement est située à plus de 4 GB
du branchement. Si cette variable d’environnement est définie (à n’importe
quelle valeur), l’éditeur de liens dynamiques essaie de mapper les pages
d’exécutables en utilisant l’indicateur MAP_32BIT de mmap(2) et de
revenir à un mappage sans cet indicateur si cet essai échoue. NB : MAP_32BIT
mappera avec les 2 GB bas (pas 4 GB) de l’espace d’adressage.
-
Parce que MAP_32BIT réduit l’éventail d’adressage pour la distribution
aléatoire de l’espace d’adressage (ASLR), LD_PREFER_MAP_32BIT_EXEC est
toujours désactivée dans le mode d’exécution sécurisée.
FICHIERS
- /lib/ld.so
-
Le chargeur et éditeur de liens dynamiques a.out.
- /lib/ld-linux.so.{1,2}
-
Le chargeur et éditeur de liens dynamiques ELF.
- /etc/ld.so.cache
-
Fichier contenant la liste compilée des répertoires dans lesquels rechercher
les objets partagés et une liste d’objets partagés candidats. Consulter
ldconfig(8).
- /etc/ld.so.preload
-
Fichier contenant une liste d’objets partagés ELF, séparés par des virgules,
à charger avant le programme. Consultez le point à propos de LD_PRELOAD
ci-dessus. Si LD_PRELOAD et /etc/ld.so.preload sont employés, la
bibliothèque indiquée par LD_PRELOAD est préchargée en
premier. /etc/ld.so.preload a un effet sur tout le système, faisant que
les bibliothèques indiquées sont préchargées pour tous les programmes
exécutés sur le système. (Cela est habituellement indésirable et employé
uniquement comme remède d’urgence, par exemple, comme contournement
temporaire d’un problème de mauvaise configuration de bibliothèque.)
- lib*.so*
-
Objets partagés.
NOTES
Legacy Hardware capabilities (from glibc 2.5 to glibc 2.37)
Certains objets partagés sont compilés en utilisant des instructions
spécifiques au matériel qui n'existent pas sur tous les processeurs. Ces
objets devraient être installés dans des répertoires dont les noms
définissent les capacités matérielles nécessaires, comme
/usr/lib/sse2/. L'éditeur de liens dynamiques compare ces répertoires au
matériel de la machine et sélectionne la version la mieux adaptée pour un
objet partagé donné. 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
The legacy hardware capabilities support has the drawback that each new
feature added grows the search path exponentially, because it has to be
added to every combination of the other existing features.
For instance, on x86 32-bit, if the hardware supports i686 and sse2,
the resulting search path will be i686/sse2:i686:sse2:.. A new
capability newcap will set the search path to
newcap/i686/sse2:newcap/i686:newcap/sse2:newcap:i686/sse2:i686:sse2:.
glibc Hardware capabilities (from glibc 2.33)
-
-
glibc 2.33 added a new hardware capability scheme,
where under each CPU architecture, certain levels can be defined, grouping
support for certain features or special instructions. Each architecture
level has a fixed set of paths that it adds to the dynamic linker search
list, depending on the hardware of the machine. Since each new architecture
level is not combined with previously existing ones, the new scheme does not
have the drawback of growing the dynamic linker search list uncontrollably.
For instance, on x86 64-bit, if the hardware supports x86_64-v3 (for
instance Intel Haswell or AMD Excavator), the resulting search path will be
glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:. The following paths are
currently supported, in priority order.
- PowerPC (64-bit little-endian only)
-
power10, power9
- s390 (64-bit only)
-
z16, z15, z14, z13
- x86 (64-bit only)
-
x86-64-v4, x86-64-v3, x86-64-v2
glibc 2.37 removed support for the legacy hardware capabilities.
VOIR AUSSI
ld(1), ldd(1), pldd(1), sprof(1), dlopen(3), getauxval(3),
elf(5), capabilities(7), rtld-audit(7), ldconfig(8), sln(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
Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
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 à
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- Mots-clés de chaîne dynamiques
-
- OPTIONS
-
- ENVIRONNEMENT
-
- Mode d’exécution sécurisée
-
- Variables d'environnement
-
- FICHIERS
-
- NOTES
-
- Legacy Hardware capabilities (from glibc 2.5 to glibc 2.37)
-
- glibc Hardware capabilities (from glibc 2.33)
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:40 GMT, September 19, 2025