Lorsque j'exécute un processus qui lie à une bibliothèque partagée au moment de l'exécution (lié au démarrage du processus, pas lié plus tard avec dlload()
), où recherche-t-il ce .so
fichier de bibliothèque partagée ( ) autre que LD_LIBRARY_PATH
?
Contexte:
J'ai du code C ++ que j'ai écrit qui utilise une bibliothèque tierce particulière. J'ai installé la bibliothèque et compilé mon code sur deux plates-formes différentes, Ubuntu mais des versions différentes, et différentes versions de gcc également. La bibliothèque a été compilée et installée à partir des sources et se trouve /usr/local/lib
sur les deux plates-formes. Lorsque je compile mon code, je fais le lien avec les pkg-config --libs
paramètres de la bibliothèque tierce et j'ai vérifié que cela pkg-config --libs
renvoie exactement la même chose sur les deux plates-formes.
Mon code se compile avec succès sur les deux plates-formes et LD_LIBRARY_PATH
n'est pas défini (ou défini comme vide:) ""
sur les deux plates-formes. Cependant, lorsque je l'exécute sur une plate-forme, cela fonctionne bien, et sur l'autre, j'obtiens cette erreur:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Curieusement, ceux qui ne fonctionnent pas sont la nouvelle version d'Ubuntu et de gcc. : /
J'essaie donc de comprendre comment celui qui fonctionne peut localiser la bibliothèque, afin que je puisse faire en sorte que celui qui est cassé trouve la bibliothèque de la même manière. (c'est-à-dire sans réglage LD_LIBRARY_PATH
)
Mise à jour:
Voici ma sortie de cat /etc/ld.so.conf.d/*
... sur le système (plus ancien) qui fonctionne:
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... sur le système cassé (plus récent):
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
mais il donne toujours l'erreur error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... Y a-t-il une raison pour laquelle il ne prendrait pas un répertoire /etc/ld.so.conf.d/*.conf
?
sudo ldconfig -v
comme suggéré ci-dessous. Si cela ne fonctionne toujours pas, mettez à jour votre question avec la sortie de ldd /path/to/your/application
.
/etc/ld.so.conf.d/*.conf
, mais je n'en suis pas sûr.