Je classe des fichiers C et C++ pour une classe, et cette affectation utilise la bibliothèque GSL. Comme je n'ai pas d'autorisation root sur mon ordinateur, ma bibliothèque GSL est installée dans mon répertoire personnel, et j'ai donc besoin de dire aux compilateurs et aux linkers où le trouver.Indiquer à ld où rechercher les répertoires via une variable d'environnement
Ce n'est pas un problème lorsque j'écris un programme moi-même, car j'ajoute juste les indicateurs -L et -I appropriés à gcc.
Mais quand je compile des fichiers d'étudiant, je ne veux pas éditer chacun de leurs makefiles. Au lieu de cela, je veux mettre les répertoires appropriés dans une variable d'environnement, afin que cela se passe de façon transparente.
À cette fin, j'ai exporté les variables suivantes avec la bibliothèque ou comprennent des emplacements: C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, LIBRARY_PATH et LD_LIBRARY_PATH
Mais quand je compile le projet d'un étudiant, avec
gcc -Wall -o MC_thread MC_thread.c -lgsl -lgslcblas -lpthread -lm
Je reçois l'erreur suivante:
/usr/bin/ld: cannot find -lgsl
collect2: ld returned 1 exit status
make: *** [all] Error 1
J'utilise gcc v 4.1.2. En fait, je ne reçois pas l'erreur si j'utilise gcc v 4.4, mais je n'ai aucune idée pourquoi. Mon éditeur de liens est:
ld -V
GNU ld version 2.17.50.0.6-12.el5 20061020.
Essayez man ld et man ld.so pour les vars d'environnement qu'ils utilisent. LD_LIBRARY_PATH peut fonctionner. – Eugene
Je pense que LD_LIBRARY_PATH est seulement utilisé par ld.so, pas par ld. Puisque est une erreur de compilation, pas une erreur d'exécution, je voudrais se concentrer sur pourquoi LIBRARY_PATH ne fonctionne pas. Deux choses que je vérifierais, est-ce que le fichier de bibliothèque a le bon nom et est LIBRARY_PATH actuellement défini dans l'environnement d'exécution de gcc? –
Essayez d'exécuter gcc avec l'option '-v' et publiez l'invocation complète de ld depuis la sortie. –