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.

15

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 -vg++ 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.

8
répondu Jonathan Wakely 2015-03-17 13:42:47

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.

-1
répondu Priyank Desai 2014-08-04 19:27:22

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

-2
répondu KLee 2018-06-13 21:37:37