176 votes

LD_LIBRARY_PATH vs LIBRARY_PATH

Je suis en train de construire un simple programme en C++ et je veux remplacer temporairement un système livré bibliothèque partagée avec une version plus récente, de développement et de test.

J'ai essayé le réglage de la variable LD_LIBRARY_PATH mais l'éditeur de liens (ld) a échoué avec:

/usr/bin/ld: ne peut trouver -lyaml-rpc

Je m'attendais à ce travail, car, selon la ld page de man:

L'éditeur de liens utilise la recherche suivante les chemins de localiser partagés requis bibliothèques: ... Pour un natif de l'éditeur de liens, le contenu de la variable d'environnement "LD_LIBRARY_PATH"...

J'ai ensuite essayé le réglage de la LIBRARY_PATH, et que travaillé.

Selon le manuel de GCC:

La valeur de LIBRARY_PATH est un, séparés par deux points de la liste de répertoires, comme dans beaucoup de CHEMIN. Lorsque configuré comme un compilateur natif, GCC essaie les répertoires ainsi spécifié lors de la recherche pour l'éditeur de liens spéciaux fichiers, s'il ne peut pas les trouver à l'aide de GCC_EXEC_PREFIX. Réticulation à l'aide de GCC utilise également ces répertoires lors de l' la recherche pour le commun des bibliothèques pour l'option-l (mais répertoires spécifiée avec -L viennent en premier).

Comme l' (GCC) manuel suggère, LIBRARY_PATH fonctionne parce que j'en lien avec GCC.

Mais..

  • Depuis que j'ai un lien avec gcc ld est pourquoi d'être appelé, comme le message d'erreur suggère?
  • Quel est le point de ayant deux variables qui servent le même le but? Existe-il d'autres les différences?

232voto

Naveen Points 1596

LIBRARY_PATH est utilisé par gcc avant la compilation pour rechercher les répertoires contenant les bibliothèques qui ont besoin d'être lié à votre programme.

LD_LIBRARY_PATH est utilisé par votre programme pour rechercher les répertoires contenant les bibliothèques après qu'il a été correctement compilé et lié.

EDIT: Comme indiqué ci-dessous, vos bibliothèques peuvent être statiques ou partagé. Si elle est statique alors que le code est copié dans votre programme et vous n'avez pas besoin de recherche de la bibliothèque une fois que votre programme est compilé et lié. Si votre bibliothèque est partagé, alors il doit être liée de manière dynamique à votre programme et à ce moment - LD_LIBRARY_PATH entre en jeu.

50voto

F'x Points 6557

une recherche est effectuée lorsque le programme démarre, est des recherches en lien temps.

13voto

heroxbd Points 134
<blockquote> <p>Étant donné que j’ai un lien avec gcc pourquoi ld est appelée, comme l’erreur message suggère ?</p> </blockquote> <p>CCG appelle ld en interne lorsqu’il est en mode de liaison.</p>

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