J'ai un exécutable qui nécessite une bibliothèque partagée qui réside dans le dossier /opt/...
. J'ai inclus le chemin dans LD_LIBRARY_PATH
sous /etc/environment
et je l'ai mis à jour à l'aide de source /etc/environment
. Lorsque j'exécute cet exécutable sans les autorisations root, j'obtiens une erreur disant libxxx.so: cannot open shared object file: No such file or directory
. Mais quand je le lance avec Sudo
, il s'exécute. Bien que le problème soit, la licence n'est pas sous l'utilisateur root, elle génère donc une erreur concernant la licence. J'ai changé l'autorisation pour /opt/...
afin que l'utilisateur normal puisse créer et supprimer des fichiers. Bien que cela n'aide pas. Quel est le problème et comment puis-je résoudre ce problème?
/etc/environment
est interprété lors de la connexion. La manière correcte de voir les modifications que vous avez apportées à /etc/environment
consiste à vous déconnecter et à vous reconnecter.
Sudo
fonctionne car il émule partiellement le login en tant que root (Sudo -i
émule le login encore plus précisément).
source /etc/environment
ne fonctionnera pas, car source
est une commande Shell qui demande au Shell d'interpréter le fichier donné en tant que script Shell. Le problème est le suivant: /etc/environment
n'est pas un script shell. C'est une liste de variables d'environnement paires nom-valeur au format:
name="value"
Cette ligne, pour un shell, correspond à la définition d'une variable globale , visible uniquement par Shell. Les programmes exécutés à partir du shell ne peuvent pas le voir. La manière correcte de définir une variable d'environnement consiste à utiliser la commande export
Shell:
export name="value"
Donc, si vous voulez vraiment utiliser votre tout nouveau LD_LIBRARY_PATH
sans vous déconnecter, vous devez exécuter la commande suivante au lieu de source /etc/environment
:
export LD_LIBRARY_PATH="/opt/..."
UPDATE: LD_LIBRARY_PATH
ne peut pas être défini dans /etc/environment
à cause de ssh-agent
. Pour plus de détails, voir bug n ° 47958 et la page wiki d'Ubuntu sur variables d'environnement . Comme spécifié dans la page wiki, une solution de contournement existe et consiste à utiliser /etc/ld.so.conf.d
.
Par exemple, vous pouvez créer /etc/ld.so.conf.d/opt.conf
avec le contenu suivant:
# Paths for my cool libraries
/opt/...
Bien que cela soit répertorié en tant que solution de contournement, ld.so.conf.d
est en réalité l'endroit le plus approprié pour de tels paramètres.