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
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, 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é.