J'essaie de comprendre comment définir une variable d'environnement qui obligerait g ++ à se lier aux versions correctes des bibliothèques.
J'ai quelques anciennes bibliothèques boost dans/usr/lib64 (la liaison contre celles-ci échouera) et de nouvelles bibliothèques dans/v/users/regel/lib. L'éditeur de liens doit donc établir un lien avec les nouvelles bibliothèques.
Commander:
$ g++ test.cpp -lboost_system -L/v/users/regel/lib
relie correctement le programme. Cependant, je souhaite le définir comme le répertoire de recherche numéro 1 pour l'éditeur de liens afin de ne pas avoir à spécifier "-L" à chaque connexion.
Les variables d'environnement suivantes ne semblent pas faire l'affaire:
$ LIBRARY_PATH=/v/users/regel/lib g++ test.cpp -lboost_system
/tmp/regel/cc4SmBtI.o: In function `main':
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status
et
$ LD_LIBRARY_PATH=/v/users/regel/lib:$LD_LIBRARY_PATH g++ test.cpp -lboost_system
/tmp/regel/ccUreBZy.o: In function `main':
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status
Malgré la lecture de nombreux articles et articles sur des sujets similaires, je n'ai pas encore trouvé de solution.
Comme le manuel GCC dit , LIBRARY_PATH
est la variable d'environnement correcte pour ajouter des répertoires au chemin de recherche de la bibliothèque.
Si vous ajoutez -v
à la g++
commande, vous devriez voir le LIBRARY_PATH
qu'il utilise et vous devriez voir qu'il inclut le répertoire que vous avez spécifié et qu'il est ajouté au collect2
commande comme -L
, mais vous verrez qu'il est ajouté après les répertoires standard tels que -L/usr/lib
etc.
Je ne connais aucun moyen de créer les répertoires dans LIBRARY_PATH
d'abord, je pense que vous devez utiliser -L
pour ça.