LD_LIBRARY_PATH toujours vide après sudo

9

Je reçois des erreurs de bibliothèque partagée chaque fois que je semble installer un logiciel manuellement. Lors de l'exécution, echo $LD_LIBRARY_PATHil apparaît comme .. rien . J'ai essayé d'ajouter /usr/local/libà un .conffichier, /etc/ld.so.conf.dmais il semble qu'il ne s'exécute jamais.

Cela ne fonctionne pas non plus (guillemets ou autre):

LD_LIBRARY_PATH="/usr/local/lib"
export LD_LIBRARY_PATH
sudo ldconfig -v

La valeur sera définie temporairement, mais elle ne la conservera pas si je quitte la fenêtre d'un terminal. Le redémarrage ne fait rien non plus.

Dissident Rage
la source
Essayez de l'ajouter à~/.bashrc
Kevdog777
Ce n'est pas un doublon; la question n'est pas pertinente et la réponse ne fonctionne pas.
Dissident Rage
1
Oui, permettez-moi d'utiliser un logiciel cassé d'il y a un an au lieu de me permettre de le mettre à jour pour tester si quelque chose a changé pour le mieux.
Dissident Rage

Réponses:

7

Ajoutez ce qui suit à votre .bashrc:

vim ~/.bashrc

...
export LD_LIBRARY_PATH=/usr/local/lib

Cela vous permettra de redémarrer votre ordinateur tout en ayant ce chemin assigné.

Kevdog777
la source
2
C'est bien pour un utilisateur. Et pour tous les utilisateurs?
Dissident Rage
2
@DissidentRage: ajoutez la même chose à /etc/bash.bashrc
JdeHaan
Je vais marquer cela comme la réponse car cela fonctionne pour la portée donnée. Que puis-je faire pour les fichiers qui ne sont clairement pas exécutés /etc/ld.so.conf.d?
Dissident Rage
1

Sur Red Hat Enterprise Linux (RHEL) 6, /etc/ld.so.confcontient include ld.so.conf.d/*.conf. Sans cette ligne, les éléments /etc/ld.so.conf.d/*.confne seraient jamais analysés.

Pour voir quelles bibliothèques / répertoires ldconfiganalysent

ldconfig -v 

Imprimer le numéro de version actuel, le nom de chaque répertoire au fur et à mesure de son analyse et tous les liens créés.

pyther
la source
Oui, j'ai vérifié /etc/ld.so.confplus tôt car j'étais curieux de savoir ce qu'il contenait. Il avait la includeligne.
Dissident Rage
L'exécution ldconfig -vpeut vous donner une idée de la raison pour laquelle la bibliothèque n'est pas incluse. Vous pouvez exécuter ldconfig -ppour imprimer les bibliothèques et répertoires qui se trouvent dans le fichier cache actuel.
pyther
0

J'ai finalement résolu cela avec un alias:

alias sudo='sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'

Veillez à utiliser des guillemets simples, afin que les variables soient développées au moment de l'appel, et non au moment où l'alias est défini.

Cette:

  • préserve HOME (qui autrement est défini sur / root)
  • conserve PATH (qui autrement est défini sur un chemin «sûr» dans suders)
  • conserve la valeur actuelle de LD_LIBRARY_PATH (qui autrement est effacée)

(Vous pouvez voir ce que les choses se régler à avec: sudo bash -c "echo $HOME")

Je travaille avec des pilotes personnalisés et je dois toujours lancer mes programmes de test pour accéder au pilote. Je ne veux pas installer des versions de test des bibliothèques dans la zone système, donc j'utilise LD_LIBRARY_PATH pour configurer un répertoire de test spécifique selon les besoins. Je ne peux pas simplement définir un LD_LIBRARY_PATH fixe, je dois pouvoir le changer et conserver le paramètre actuel. Préserver PATH et HOME me donne accès à mon environnement de travail - scripts et structure de répertoires.

Cet alias évite d'avoir à accorder des autorisations de couverture dans sudoers ... et il n'y a apparemment aucune solution de contournement pour LD_LIBRARY_PATH indépendamment des paramètres sudoers de toute façon. Il ne fonctionne pas sudo à l'intérieur des scripts, mais ceux-ci peuvent être codés en dur selon les besoins.

maharvey67
la source