GCC comment ajouter avant le chemin de recherche par défaut de linker par défaut? Le chemin de la bibliothèque ne fonctionne pas
j'essaie de trouver comment définir une variable d'environnement qui ferait de g++ un lien vers les versions correctes des bibliothèques.
j'ai quelques anciennes bibliothèques boost dans /usr/lib64 (les liens contre ces dernières échoueront) et de nouvelles bibliothèques dans /v/users/regel/lib. Ainsi, le linker devrait se relier aux nouvelles bibliothèques.
Commande:
$ g++ test.cpp -lboost_system -L/v/users/regel/lib
lie le programme correctement. Cependant, je souhaite définir ceci comme le répertoire de recherche numéro 1 pour le linker de sorte que je Je n'ai pas à spécifier '-L' à chaque fois que je crée un lien.
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 billets sur des sujets similaires, Je n'ai pas encore trouvé de solution.
3 réponses
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
g++
commande vous devriez voir le LIBRARY_PATH
qu'il utilise, et vous devriez voir il comprend le répertoire que vous avez spécifié, et qu'il est ajouté à l' collect2
commande -L
, mais vous verrez il est ajouté après les répertoires standards tels que -L/usr/lib
etc.
je ne sais pas de toute façon de faire de la dans les répertoires LIBRARY_PATH
d'abord, je pense que vous devez utiliser -L
pour que.
Essayez de spécifier le chemin de la bibliothèque dans un .fichier conf dans /etc / ld.alors?conf.d/
le linker regarde les chemins spécifiés dans les fichiers dans /etc/ld.alors?conf.d / Lors de la liaison.
assurez-vous d'exécuter 'ldconfig' une fois que vous aurez créé le fichier, cela le forcera à mettre à jour son cache.
plutôt que LD_LIBRARY_PATH, essayez ceci.
$ C_INCLUDE_PATH=/PATH/TO/LIBRARY
$ export C_INCLUDE_PATH
ça devrait marcher. http://www.network-theory.co.uk/docs/gccintro/gccintro_23.html