web-dev-qa-db-fra.com

gcc - erreur/usr/bin/ld: impossible de trouver <bibliothèque> dans/usr/local/lib bien que ldconfig

J'essaie de compiler un code C++ en utilisant une bibliothèque que j'ai également compilée manuellement et installée dans/usr/local/lib

La compilation du logiciel échoue à l'étape de la liaison:

 /usr/bin/ld: error: cannot find -lcppdb

il semble que g ++ ne recherche pas par défaut dans /usr/local/lib, idem pour clang++

 g++ -print-search-dirs # does not show /usr/local/lib

cependant, le fait est que /usr/local/lib se trouve dans mon /etc/ld.so.conf et que j’ai exécuté ldconfig en tant que root et que, en fait, ldconfig -p | grep cppdb me montre 

libcppdb_sqlite3.so.0 (libc6) => /usr/local/lib/libcppdb_sqlite3.so.0
libcppdb_sqlite3.so (libc6) => /usr/local/lib/libcppdb_sqlite3.so
libcppdb.so.0 (libc6) => /usr/local/lib/libcppdb.so.0
libcppdb.so (libc6) => /usr/local/lib/libcppdb.so

l'ajout de l'option -L/usr/local/lib résout évidemment le problème, mais l'objectif est d'utiliser des fichiers de configuration

13
allan.simon

ld, l'éditeur de liens, n'utilise pas de fichiers de configuration externes pour cela. ldconfig est pour le chargeur, ld.so. Créez un fichier makefile si vous souhaitez définir des valeurs quelque part pour l'éditeur de liens.

Spécifier des commutateurs -L dans votre fichier make est un moyen courant de résoudre ce problème, mais vous pouvez réellement apporter des modifications à l’ensemble du système en modifiant le fichier GCC spec par défaut, qui peut être utilisé pour spécifier compilateur, éditeur de liens, etc. J'ai déjà fait cela par le passé pour résoudre votre problème spécifique, mais c'était il y a longtemps, donc je ne peux malheureusement pas vous donner d'exemple précis.

1
jjlin

1, Vous pouvez utiliser le script de l'éditeur de liens et ajouter '/ usr/local/lib' à search_dir . Voir ce Linker_Scripts pour obtenir plus de détails.

2, ajoutez/usr/local/lib à l’environnement Shell GCC_EXEC_PREFIX, puis essayez à nouveau . Plus de détails, recherchez print-search-dirs dans "man" de g ++.

juste une suggestion, ça n’a pas encore été essayé.

0
liuyang1