4 votes

LD_LIBRARY_PATH ne fonctionne pas alors que LD_PRELOAD fonctionne bien.

Je compile un programme sur une machine et je l'exécute sur une autre qui ne dispose pas de la bibliothèque libstdc++ compatible. Si je l'exécute comme ceci, c'est-à-dire en utilisant LD_PRELOAD, il fonctionne bien.

LD_PRELOAD=./libstdc++.so.6 ./program args

Cependant, si j'essaie d'utiliser LD_LIBRARY_PATH, comme indiqué ci-dessous, la bibliothèque n'est pas chargée et j'obtiens l'erreur suivante : je n'ai pas la version de libstdc++ requise.

export LD_LIBRARY_PATH="./libstdc++.so.6"
./program args

Comment puis-je résoudre ce problème ?

6voto

hyde Points 13720

Vous devez indiquer les chemins dans la variable LD_LIBRARY_PATH :

LD_LIBRARY_PATH=$PWD ./program args

6voto

Mat Points 104488

LD_LIBRARY_PATH comme PATH prend une liste de répertoires, pas de fichiers.

Si vous voulez mettre le répertoire courant ( pas recommandé), vous pouvez le faire :

export LD_LIBRARY_PATH=.

Mais il est toujours préférable d'y mettre des chemins absolus afin de ne pas récupérer des déchets aléatoires si vous changez de répertoire.

Pour votre problème spécifique, gardez LD_PRELOAD pourrait en fait être la meilleure façon de le faire dans le cas où votre exécutable a rpath (qui peuvent remplacer l'environnement). Créez un wrapper script qui le fait si vous ne voulez pas le retaper à chaque fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X