Est-il normal que la variable LD_LIBRARY_PATH manque dans un environnement?

15

J'ai trouvé par coïncidence que sur ma Debian Jessie, il n'y a pas de LD_LIBRARY_PATHvariable (pour être exact printenv | grep LD, ne montre rien de lié à l'éditeur de liens et ne echo "$LD_LIBRARY_PATH"montre rien non plus).

C'est le cas dans l'émulateur de terminal x ( qui pourrait l'effacer en raison de setgid ) ainsi que dans le terminal de base ( Ctrl+Alt+F1).

Je sais que cela LD_LIBRARY_PATH peut être considéré comme mauvais, donc Debian peut le bloquer d'une manière ou d'une autre, mais d'un autre côté, il y a quelques fichiers /etc/ld.so.conf.d/qui contiennent des répertoires à ajouter LD_LIBRARY_PATH. Aucun de mes fichiers rc (à ma connaissance) ne dérange pas LD_LIBRARY_PATHnon plus.

Pourquoi je ne vois pas de LD_LIBRARY_PATHvariable?

calavera.info
la source

Réponses:

22

Oui, il est normal que vous n'en ayez aucune explicite LD_LIBRARY_PATH. Lisez aussi ldconfig (8) et ld-linux (8) et à propos du rpath . Notez que les ldconfigmises à jour /etc/ld.so.cache, pas le LD_LIBRARY_PATH. Parfois, vous définissez explicitement le chemin d' accès d'un exécutable avec un -Wl,-rpath,répertoire passé gccau moment de la liaison.

Si vous en avez besoin LD_LIBRARY_PATH(mais vous ne devriez probablement pas), réglez-le vous-même (par exemple dans ~/.bashrc).

Si vous avez besoin des paramètres au niveau système, vous pourriez par exemple envisager d' ajouter /usr/local/lib/à /etc/ld.so.confet exécuter ldconfigaprès l' installation de chaque bibliothèque là.

AFAIK $LD_LIBRARY_PATHn'est utilisé que par l'éditeur de liens dynamique ld-linux.so(et par dlopen (3) qui l'utilise) après execve (2) . Voir aussi ldd (1) .

Lisez Comment écrire des bibliothèques partagées de Drepper pour en savoir plus.

Basile Starynkevitch
la source
C'était mon erreur, je pensais que LD_LIBRARY_PATH est le produit de la course ldconfig. En attendant, c'est l' entrée de ldconfig avec les fichiers dans /etc/ld.so.conf.
calavera.info
1
Mon sentiment est que ldconfigne pas utiliser $LD_LIBRARY_PATH(qui n'est utilisé que de ld-linux.sotemps en temps)
Basile Starynkevitch
3
@ calavera.info ce n'est ni l'un ni l'autre. Le segment de liaison dynamique utilise LD_LIBRARY_PATH conjointement avec la sortie ldconfigà l' exécution. ldconfigni utilisations ni changements LD_LIBRARY_PATH.
Hobbs
Maintenant, je peux voir que je l'avais totalement foiré, probablement en passant trop de temps en Java, où "classpath" est virtuellement la seule configuration de liaison dynamique. Tout semble clair maintenant, merci beaucoup.
calavera.info