web-dev-qa-db-fra.com

Utiliser des bibliothèques partagées dans / usr / local / lib

J'ai construit des bibliothèques à partir de sources et les fichiers après make install sont dans /usr/local/lib

Par exemple, dans mon cas, j'ai le fichier libodb-2.2.so qui se trouve dans ce répertoire.

Cependant, lorsque je lance l'exécutable qui s'est lié à libodb, j'ai eu l'erreur: erreur lors du chargement des bibliothèques partagées: libodb-2.2.so: cannont open shared object file: No such file or directory.

Est-ce à dire que je n'ai pas construit correctement mon exécutable? ou dois-je indiquer au système qu'il peut y avoir des bibliothèques intéressantes dans le dossier /usr/local/lib aussi ?

J'utilise Ubuntu 12.04, noyau Linux 3.2.0-38-générique.

60
Stephane Rolland

Pour la session en cours, vous pouvez

 exporter LD_LIBRARY_PATH =/lib:/usr/lib:/usr/local/lib 

ou pour rendre le changement permanent, vous pouvez ajouter /usr/local/lib à /etc/ld.so.conf (ou quelque chose qu'il inclut) et exécutez ldconfig en tant que root.

Si vous rencontrez toujours des problèmes, exécutez ldd [executable name] vous montrera les bibliothèques qu'il essaie de trouver et celles qui ne peuvent pas être trouvées.

60
Flup

Si vous avez déjà exécuté ldconfig après avoir créé la bibliothèque, continuez à lire. Sinon, lire à propos de ldconfig en premier.

/usr/local/lib n'est peut-être pas dans le chemin d'accès à la bibliothèque utilisé par ldconfig. Vous pouvez simplement faire ceci:

ldconfig /usr/local/lib

Et le truc devrait être ajouté au cache de l'éditeur de liens, mais il est probablement préférable d'ajouter le chemin correctement. Assurez-vous que vous disposez d'un /etc/ld.so.conf.d répertoire. Si c'est le cas, ajoutez un fichier (appelez-le "usr-local.conf", ou autre), et mettez-y une ligne:

/usr/local/lib

Exécutez maintenant ldconfig. Si vous n'avez pas le répertoire ld.so.conf.d, vous devriez avoir un /etc/ld.so.conf fichier et vous pouvez ajouter cette ligne à la fin de celui-ci.

42
goldilocks