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?
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.
LD_LIBRARY_PATH
est recherché lorsque le programme démarre, LIBRARY_PATH
est recherché au moment du lien.
mise en garde commentaires :
- lorsqu'on relie des bibliothèques avec
ld
(au lieu degcc
oug++
), les variables d'environnementLIBRARY_PATH
ouLD_LIBRARY_PATH
ne sont pas lues. - lors de la liaison de bibliothèques avec
gcc
oug++
, leLIBRARY_PATH
la variable d'environnement est lue (voir documentation "gcc
utilise ces répertoires lors de la recherche de bibliothèques ordinaires" ).
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.