Chemin de la bibliothèque LD vs chemin de la bibliothèque

je suis en train de construire un programme C++ simple et je veux remplacer temporairement une bibliothèque partagée fournie par un système avec une version plus récente de celui-ci, pour le développement et les tests.

j'ai essayé de définir la variable LD_LIBRARY_PATH mais le linker (ld) a échoué avec:

/ usr/bin / ld: impossible de trouver-lyaml-cpp

Je m'attendais à ce que cela fonctionne parce que selon la page de LD man:

le linker utilise la recherche suivante chemins pour localiser le partage requis bibliothèque. :.. Pour un linker natif, le contenu de la variable d'environnement "LD_LIBRARY_PATH"...

j'ai alors essayé de configurer le LIBRARY_PATH, et cela a fonctionné.

selon le manuel de GCC:

la valeur de LIBRARY_PATH est une liste séparée par deux points de répertoires, un peu comme le chemin. Lorsque configuré comme un compilateur natif, GCC essaie les répertoires ainsi spécifié lors de la recherche de linker spécial les fichiers, s'il ne peut pas les trouver en utilisant Gcc_exec_prefix. Réticulation à l'aide de GCC utilise aussi ces répertoires quand recherche de bibliothèques ordinaires pour l'option-l (mais les répertoires spécifié avec-je viens en premier).

comme le manuel (GCC) le suggère, LIBRARY_PATH fonctionne parce que je suis en lien avec GCC.

mais..

  • depuis que je lien avec gcc pourquoi ld est d'être appelé, comme le message d'erreur suggère?
  • Quel est l'intérêt de ayant deux variables servant le même le but? Existe-il d'autres les différences?
120
demandé sur Georgios Politis 2010-11-23 01:02:20

3 réponses

LIBRARY_PATH est utilisé par gcc avant la compilation pour rechercher des répertoires contenant des bibliothèques statiques qui doivent être liées à votre programme.

LD_LIBRARY_PATH est utilisé par votre programme pour rechercher des répertoires contenant des bibliothèques partagées après qu'il a été compilé et lié avec succès.

EDIT: Comme indiqué ci-dessous, vos bibliothèques peuvent être statiques ou partagé. S'il est statique, alors 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ée, alors elle doit être dynamiquement liée à votre programme et c'est là que LD_LIBRARY_PATH entre en jeu.

170
répondu Naveen 2017-10-23 21:08:26

LD_LIBRARY_PATH est recherché lorsque le programme démarre, LIBRARY_PATH est recherché au moment du lien.

mise en garde commentaires :

33
répondu F'x 2018-04-27 15:09:53

depuis que je me connecte avec gcc pourquoi ld est appelé, comme le suggère le message d'erreur?

gcc appelle ld en interne quand il est en mode linking.

10
répondu heroxbd 2011-12-02 00:36:44