linker ld : chemin de recherche par défaut des lib, modification des chemins de recherch e des lib
3 réponses
ludo
bonjour,
J'aimerais comprendre comment le linker recherche les librairies, le
"man ld" n'étant pas très explicite
la doc indique que l'on peut spécifier des chemins avec l'option -L
Mais ld semble utiliser également des chemins par défaut et je n'ai pas
trouvé où ils étaient définis
le "man ld" n'indique pas de fichier de configuration (genre
/etc/ld.conf) ni de variable d'environnement
j'ai essayé de tracer le comportement de ld avec strace (la libde test
libouestlalib.a/.so n'existant pas)
$strace ld -louestlalib -o a
ce qui donne quelque chose comme :
open("/usr/bin/../lib/libouestlalib.so", O_RDONLY|O_LARGEFILE) = -1
ENOENT (No such file or directory)
open("/usr/i486-linux-gnu/lib32/libouestlalib.so", O_RDONLY|O_LARGEFILE)
= -1 ENOENT (No such file or directory)
open("/usr/local/lib32/libouestlalib.so", O_RDONLY|O_LARGEFILE) = -1
ENOENT (No such file or directory)
open("/lib32/libouestlalib.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No
such file or directory)
open("/usr/lib32/libouestlalib.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT
(No such file or directory)
open("/usr/i486-linux-gnu/lib/libouestlalib.so", O_RDONLY|O_LARGEFILE) =
-1 ENOENT (No such file or directory)
open("/usr/local/lib/libouestlalib.so", O_RDONLY|O_LARGEFILE) = -1
ENOENT (No such file or directory)
open("/lib/libouestlalib.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such
file or directory)
open("/usr/lib/libouestlalib.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No
such file or directory)
grosso modo, l'ordre des répertoires me semble presque logique :
/usr/bin/../lib /usr/local/lib /lib /usr/lib
/usr/bin/../lib est un chemin relatif à ld qui force l'utilisation de
/usr/lib
ce qui signifie que si on reconstruit une lib, déjà existante sur la
machine dans /usr/lib, avec une génération par défaut dans /usr/local/*,
la nouvelle version dans /usr/local/lib ne sera pas utilisée si elle est
déjà présente dans /usr/lib (il faudra forcément utiliser l'option 'ld
-L /usr/local/lib' )
Par exemple, si on regénère libz.so avec une installation dans
/usr/local/lib
ld -lz -o a
continue d'utiliser /usr/lib/libz.so
par contre
ld -L /usr/local/lib -lz -o a
utilisera la nouvelle version /usr/local/lib/libz.so
Il y a des répertoires dépendant de l'archi (/usr/i486-linux-gnu) qui
n'existe pas : c'est pour le debug de ld ?
=> Je suppose que ces différents chemins de recherche sont codés en dur
dans ld lors de sa génération : est ce correct ?
ce que j'en déduis :
1/ il n'y a pas de fichiers de configuration pour spécifier tous les
chemins de recherche des lib
2/ pour modifier les chemins de recherche des lib, il n'y a qu'une seule
façon de faire : l'option '-L'
Mais est ce effectivement comme cela que fonctionne ld ?
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
David Soulayrol
Le jeudi 06 novembre 2008 à 11:32 +0100, ludo a écrit :
bonjour, [...] ce que j'en déduis : 1/ il n'y a pas de fichiers de configuration pour spécifier tous les chemins de recherche des lib
Si. Jette un oeil à /etc/ld.so.conf. Ce fichier est utilisé par la système pour créer /etc/ld/so/cache (je ne sais plus s'il faut intervenir manuellement pour rafraîchir le cache).
2/ pour modifier les chemins de recherche des lib, il n'y a qu'une seule façon de faire : l'option '-L'
Non. La macro LD_LIBRARY_PATH permet de spécifier des chemins prioritaires.
Mais est ce effectivement comme cela que fonctionne ld ?
-- David.
-- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
To UNSUBSCRIBE, email to with a subject of "unsubscribe". Trouble? Contact
Le jeudi 06 novembre 2008 à 11:32 +0100, ludo a écrit :
bonjour,
[...]
ce que j'en déduis :
1/ il n'y a pas de fichiers de configuration pour spécifier tous les
chemins de recherche des lib
Si. Jette un oeil à /etc/ld.so.conf. Ce fichier est utilisé par la
système pour créer /etc/ld/so/cache (je ne sais plus s'il faut
intervenir manuellement pour rafraîchir le cache).
2/ pour modifier les chemins de recherche des lib, il n'y a qu'une seule
façon de faire : l'option '-L'
Non. La macro LD_LIBRARY_PATH permet de spécifier des chemins
prioritaires.
Mais est ce effectivement comme cela que fonctionne ld ?
--
David.
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Le jeudi 06 novembre 2008 à 11:32 +0100, ludo a écrit :
bonjour, [...] ce que j'en déduis : 1/ il n'y a pas de fichiers de configuration pour spécifier tous les chemins de recherche des lib
Si. Jette un oeil à /etc/ld.so.conf. Ce fichier est utilisé par la système pour créer /etc/ld/so/cache (je ne sais plus s'il faut intervenir manuellement pour rafraîchir le cache).
2/ pour modifier les chemins de recherche des lib, il n'y a qu'une seule façon de faire : l'option '-L'
Non. La macro LD_LIBRARY_PATH permet de spécifier des chemins prioritaires.
Mais est ce effectivement comme cela que fonctionne ld ?
-- David.
-- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
To UNSUBSCRIBE, email to with a subject of "unsubscribe". Trouble? Contact
Il faut faire la différence entre le linker (ld, fournit par binutils) qui est utilisé lors de la compilation et le linker/loader (ld.so/ld-linux.so fournit par la glibc) utilisé à l'exécution : leur fonctionnement est totalement indépendant.
Pour ld.so, les répertoires de recherche des lib dynamiques (.so) (hors ceux par défauts : /lib et /usr/lib) sont indiqués dans /etc/ld.so.conf .
Pour ld, les répertoires de recherche des lib (.a) sont fixés lors de s a compilation, si ceux par défaut ne conviennent pas, par la variable LIB_PATH. On peut les connaître par la commande "ld --verbose" (SEARCH_DIR). En dehors de ces chemins il est nécessaire de passer par la variable LIBDIR ou l'option -L.
Bruno
-- HISTOIRE M : Il paraît que Thomas Jefferson a eu un enfant avec son chien... P : Mais non ! C'est avec son esclave qu'il a eu un gosse... M : Qu'est-ce qu'il a eu alors, avec son chien ? P : La chtouille. M : Ah, ouais...
--=-saZC8Tzg6fjby3G9jY0r Content-Type: application/pgp-signature; name=signature.asc Content-Description: Ceci est une partie de message =?ISO-8859-1?Q?numériquement?= =?ISO-8859-1?Q?_signée? -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux)
-- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
To UNSUBSCRIBE, email to with a subject of "unsubscribe". Trouble? Contact
Il faut faire la différence entre le linker (ld, fournit par binutils)
qui est utilisé lors de la compilation et le linker/loader
(ld.so/ld-linux.so fournit par la glibc) utilisé à l'exécution : leur
fonctionnement est totalement indépendant.
Pour ld.so, les répertoires de recherche des lib dynamiques (.so) (hors
ceux par défauts : /lib et /usr/lib) sont indiqués dans /etc/ld.so.conf .
Pour ld, les répertoires de recherche des lib (.a) sont fixés lors de s a
compilation, si ceux par défaut ne conviennent pas, par la variable
LIB_PATH. On peut les connaître par la commande "ld
--verbose" (SEARCH_DIR).
En dehors de ces chemins il est nécessaire de passer par la variable
LIBDIR ou l'option -L.
Bruno
--
HISTOIRE
M : Il paraît que Thomas Jefferson a eu un enfant avec son chien...
P : Mais non ! C'est avec son esclave qu'il a eu un gosse...
M : Qu'est-ce qu'il a eu alors, avec son chien ?
P : La chtouille.
M : Ah, ouais...
--=-saZC8Tzg6fjby3G9jY0r
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: Ceci est une partie de message
=?ISO-8859-1?Q?numériquement?= =?ISO-8859-1?Q?_signée?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Il faut faire la différence entre le linker (ld, fournit par binutils) qui est utilisé lors de la compilation et le linker/loader (ld.so/ld-linux.so fournit par la glibc) utilisé à l'exécution : leur fonctionnement est totalement indépendant.
Pour ld.so, les répertoires de recherche des lib dynamiques (.so) (hors ceux par défauts : /lib et /usr/lib) sont indiqués dans /etc/ld.so.conf .
Pour ld, les répertoires de recherche des lib (.a) sont fixés lors de s a compilation, si ceux par défaut ne conviennent pas, par la variable LIB_PATH. On peut les connaître par la commande "ld --verbose" (SEARCH_DIR). En dehors de ces chemins il est nécessaire de passer par la variable LIBDIR ou l'option -L.
Bruno
-- HISTOIRE M : Il paraît que Thomas Jefferson a eu un enfant avec son chien... P : Mais non ! C'est avec son esclave qu'il a eu un gosse... M : Qu'est-ce qu'il a eu alors, avec son chien ? P : La chtouille. M : Ah, ouais...
--=-saZC8Tzg6fjby3G9jY0r Content-Type: application/pgp-signature; name=signature.asc Content-Description: Ceci est une partie de message =?ISO-8859-1?Q?numériquement?= =?ISO-8859-1?Q?_signée? -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux)
-- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
To UNSUBSCRIBE, email to with a subject of "unsubscribe". Trouble? Contact
ludo
Bruno Muller a écrit :
Hello,
Il faut faire la différence entre le linker (ld, fournit par binutils) qui est utilisé lors de la compilation et le linker/loader (ld.so/ld-linux.so fournit par la glibc) utilisé à l'exécution : leur fonctionnement est totalement indépendant.
Pour ld.so, les répertoires de recherche des lib dynamiques (.so) (hors ceux par défauts : /lib et /usr/lib) sont indiqués dans /etc/ld.so.conf.
Pour ld, les répertoires de recherche des lib (.a) sont fixés lors de sa compilation, si ceux par défaut ne conviennent pas, par la variable LIB_PATH. On peut les connaître par la commande "ld --verbose" (SEARCH_DIR). En dehors de ces chemins il est nécessaire de passer par la variable LIBDIR ou l'option -L.
Bruno
petite précision : LIB_PATH et LIBDIR : tu veux parler de variables dans un makefile ? LIB_PATH et LIBDIR comme var. d'env ne semblent pas prise en compte par ld (sur le net, on trouve un "man ld" pour une vieille version qui parle de LIBDIR et LLIBDIR, mais elles ne semblent plus utilisées)
-- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
To UNSUBSCRIBE, email to with a subject of "unsubscribe". Trouble? Contact
Bruno Muller a écrit :
Hello,
Il faut faire la différence entre le linker (ld, fournit par binutils)
qui est utilisé lors de la compilation et le linker/loader
(ld.so/ld-linux.so fournit par la glibc) utilisé à l'exécution : leur
fonctionnement est totalement indépendant.
Pour ld.so, les répertoires de recherche des lib dynamiques (.so) (hors
ceux par défauts : /lib et /usr/lib) sont indiqués dans /etc/ld.so.conf.
Pour ld, les répertoires de recherche des lib (.a) sont fixés lors de sa
compilation, si ceux par défaut ne conviennent pas, par la variable
LIB_PATH. On peut les connaître par la commande "ld
--verbose" (SEARCH_DIR).
En dehors de ces chemins il est nécessaire de passer par la variable
LIBDIR ou l'option -L.
Bruno
petite précision : LIB_PATH et LIBDIR : tu veux parler de variables dans
un makefile ?
LIB_PATH et LIBDIR comme var. d'env ne semblent pas prise en compte par ld
(sur le net, on trouve un "man ld" pour une vieille version qui parle de
LIBDIR et LLIBDIR, mais elles ne semblent plus utilisées)
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Il faut faire la différence entre le linker (ld, fournit par binutils) qui est utilisé lors de la compilation et le linker/loader (ld.so/ld-linux.so fournit par la glibc) utilisé à l'exécution : leur fonctionnement est totalement indépendant.
Pour ld.so, les répertoires de recherche des lib dynamiques (.so) (hors ceux par défauts : /lib et /usr/lib) sont indiqués dans /etc/ld.so.conf.
Pour ld, les répertoires de recherche des lib (.a) sont fixés lors de sa compilation, si ceux par défaut ne conviennent pas, par la variable LIB_PATH. On peut les connaître par la commande "ld --verbose" (SEARCH_DIR). En dehors de ces chemins il est nécessaire de passer par la variable LIBDIR ou l'option -L.
Bruno
petite précision : LIB_PATH et LIBDIR : tu veux parler de variables dans un makefile ? LIB_PATH et LIBDIR comme var. d'env ne semblent pas prise en compte par ld (sur le net, on trouve un "man ld" pour une vieille version qui parle de LIBDIR et LLIBDIR, mais elles ne semblent plus utilisées)
-- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
To UNSUBSCRIBE, email to with a subject of "unsubscribe". Trouble? Contact