Réglage de la variable d'environnement LD_LIBRARY_PATH pour le chargement d'une bibliothèque partagée à l'exécution (g++)
Je vais avoir deux problèmes liés à la même question:
- Je partage un objet enregistré dans `pwd`/lib et alors que le fichier exécutable qui utilise il compile correctement (en utilisant-l et-L passe), au moment de l'exécution, c'est de me donner du chagrin. Si j'essaie de le lancer
LD_LIBRARY_PATH=/my/absolute/path/to/library/directory ./test
il fonctionne très bien. Mais si je l'export LD_LIBRARY_PATH=/mon chemin/chemin/absolu/vers/bibliothèque/annuaire et ne./test
il dit qu'il ne peut pas trouver la bibliothèque partagée. Toutefois, si je neLD_LIBRARY_PATH=$LD_LIBRARY_PATH ./test
encore, il fonctionne très bien!! Toutes les idées sur ce que je fais mal? - Deuxième problème est lié à l'exportation de la LD_LIBRARY_PATH env variable. Si j'ouvre un terminal et tapez
export LD_LIBRARY_PATH=/path/to/stuff
puis tapezecho $LD_LIBRARY_PATH
, la variable est correct. Cependant, si j'écris un script contenant la commande exporter, il suffit de marche, il n'a pas de mise à jour de la variable, au lieu de cela j'ai besoin d'exécutersource install.sh
afin d'persistent la variable. Quelle est la meilleure solution pour cela?
Merci pour votre temps!
OriginalL'auteur rhobincu | 2013-03-31
Vous devez vous connecter pour publier un commentaire.
Pour répondre à la deuxième première question:
source
exécute le script à l'intérieur du shell courant,./install.sh
s'ouvre et s'exécute dans un environnement différent.http://www.unix.com/unix-dummies-questions-answers/537-difference-between-source-exec-script.html
Maintenant, pour votre première question:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH ./test
définit la variable LD_LIBRARY_PATH avant tout à une seule commande (le./test
de commande). Pour la même raison que ci-dessus, je crois que ce n'est pas être transféré à ce que shell./test
crée. Pour faire cela persiste, vous devrez peut-être mettre laexport LD_LIBRARY_PATH=...
dans votre~/.bashrc
Hmm, je pense qu'il n'y a pas de "sécurité" façon de le faire, mais regarde ici: linuxquestions.org/questions/linux-software-2/...). Je ne sais pas trop à ce sujet, mais j'ai vu des recommandations pour envelopper votre programme principal dans un script simple qui définit le chemin de la bibliothèque, court de votre programme, puis unsets. Au lieu d'appeler votre programme directement, les utilisateurs doivent exécuter le script.
En fait, cela peut aider: osr507doc.sco.com/en/tools/ccs_linkedit_dynamic_dirsearch.html Il est sur le LD_RUN_PATH variable, qui permet de spécifier les emplacements de votre bibliothèque sur le lien-temps (une alternative à LD_LIBRARY_PATH, qui "permet de faire la même chose au moment de l'exécution"). C'est à propos de la limite de mes connaissances sur ce, désolé ...
Merci, je vais aller avec le script. Le LD_RUN_PATH est pour le moment de la compilation, autant que je sache, et c'est déjà prendre soin de avec -L.
OriginalL'auteur maditya
J'ai trouvé parfois l'ajout d'-L explicitement par les CFLAGS variable d'environnement est réussie lorsque LD_RUN_PATH ne l'était pas. Comme dans:
export CFLAGS=-L/opt/outil/lib
OriginalL'auteur ckg