Je construis un programme C ++ simple et je souhaite remplacer temporairement une bibliothèque partagée fournie par le système par une version plus récente de celle-ci, pour le développement et les tests.
J'ai essayé de définir la variable LD_LIBRARY_PATH mais l'éditeur de liens (ld) a échoué avec:
/ usr / bin / ld: impossible de trouver -lyaml-cpp
Je m'attendais à ce que cela fonctionne car selon la page de manuel ld:
L'éditeur de liens utilise les chemins de recherche suivants pour localiser les bibliothèques partagées requises: ... Pour un éditeur de liens natif, le contenu de la variable d'environnement "LD_LIBRARY_PATH" ...
J'ai ensuite essayé de définir LIBRARY_PATH, et cela a fonctionné.
Selon le manuel GCC:
La valeur de LIBRARY_PATH est une liste de répertoires séparés par deux-points, un peu comme PATH. Lorsqu'il est configuré en tant que compilateur natif, GCC essaie les répertoires ainsi spécifiés lors de la recherche de fichiers de liens spéciaux, s'il ne les trouve pas à l'aide de GCC_EXEC_PREFIX. La liaison à l'aide de GCC utilise également ces répertoires lors de la recherche de bibliothèques ordinaires pour l'option -l (mais les répertoires spécifiés avec -L viennent en premier).
Comme le suggère le manuel (GCC), LIBRARY_PATH fonctionne parce que je suis lié à GCC.
Mais..
- Depuis que je suis lié à gcc, pourquoi ld est appelé, comme le suggère le message d'erreur?
- Quel est l'intérêt d'avoir deux variables servant le même objectif? Y-a-t'il d'autres différences?
LIBRARY_PATH
est utilisé pour rechercher des répertoires contenant des bibliothèques statiques ET dynamiques, au lieu de seulement des bibliothèques statiques.LIBRARY_PATH
on recherche les bibliothèques (statiques ou dynamiques) au moment de la compilation etLD_LIBRARY_PATH
que les bibliothèques dynamiques sont recherchées au moment de l'exécution. Bien sûr, au moment de l'exécution, vous n'avez pas besoin de rechercher des bibliothèques statiques.LD_LIBRARY_PATH
est recherché au démarrage du programme,LIBRARY_PATH
est recherché au moment de la liaison.mise en garde des commentaires :
ld
(au lieu degcc
oug++
), les variables d'environnementLIBRARY_PATH
ouLD_LIBRARY_PATH
ne sont pas lues.gcc
oug++
, laLIBRARY_PATH
variable d'environnement est lue (voir la documentation "gcc
utilise ces répertoires lors de la recherche de bibliothèques ordinaires" ).la source
ld
par lui - même ne semble pas pour les bibliothèques dans les deuxLIBRARY_PATH
ouLD_LIBRARY_PATH
. Il est seulement quandgcc
invoqueld
quiLIBRARY_PATH
se habitue. (gcc appelle ld en interne lorsqu'il est en mode liaison.
la source