Question ldconfig ignore certains fichiers sous / usr / local / lib /


En essayant de démarrer un certain programme, j'ai reçu le message d'erreur suivant:

erreur lors du chargement des bibliothèques partagées: foo.so.0: impossible d'ouvrir le fichier objet partagé: aucun fichier ou répertoire de ce type

J'ai donc construit la bibliothèque requise et l'ai installée sous le répertoire /usr/local/lib/. Cependant, après la construction de la bibliothèque, il n'y avait que les fichiers foo.so, foo.so.1 et foo.so.1.0.8 en dessous de /usr/local/lib/. J'ai donc créé un lien symbolique supplémentaire vers foo.so.1.0.8 nommé foo.so.0. J'ai vérifié que /usr/local/lib est inclus dans certains fichiers sous /etc/ld.so.conf.d/ et a commencé sudo ldconfig.

Malheureusement ldconfig semble ignorer mon lien symbolique créé par moi-même. ldconfig -v imprime uniquement la ligne suivante:

foo.so.1 -> foo.so.1.0.8

ldconfig -p imprime uniquement les deux lignes suivantes:

foo.so.1 (libc6, x86-64) => /usr/local/lib/foo.so.1

foo.so (libc6, x86-64) => /usr/local/lib/foo.so

Il n'y a pas un bit aveugle du fichier foo.so.0. Qu'est-ce que je dois faire?


1
2018-02-18 23:25


origine


Qu'est-ce que vous essayez d'installer / exécuter et comment l'avez-vous installé? Semble comme si vous avez installé un paquet en dehors d'apt (apt-get ou le centre logiciel). - Panther
J'ai téléchargé et créé une version Open MPI car je dois exécuter un programme qui le nécessite. - user1494080
avez-vous essayé d'installer openmpi dans les repos? sudo apt-get install openmpi-bin ? Sinon, liez à ce que vous avez installé s'il vous plaît. - Panther
J'ai téléchargé l'archive depuis le site officiel et j'ai fait ce qui suit: open-mpi.org/faq/?category=building#easy-build - user1494080
Je ne peux pas dire à partir de ce que vous avez posté, il est difficile de suivre foo et foo.0 sans savoir ce que vous faites et la sortie de quelques commandes telles que ls et aussi le message d'erreur exact que vous obtenez. - Panther


Réponses:


TL: DR: Utilisez une version (ou une version) du programme qui prend en charge la version de la bibliothèque installée, si possible.

Comme bodhi.zazen dit, il est difficile de savoir ce qui se passe sans les commandes précises que vous avez exécutées et la sortie. cependant, foo.so.0 et foo.so.1 ne devrait pas être censé être compatible.

Pour qu'un programme compilé utilisant la version majeure 0 d'une bibliothèque fonctionne avec la version majeure 1, il est conseillé de reconstruire (recompiler et relier) le programme. En outre, l’interface qu’une bibliothèque fournit aux programmes peut changer et change souvent dans les versions majeures.

En général, il vaut mieux installer une version plus récente du programme qui prend en charge la version de bibliothèque que vous souhaitez utiliser, si possible.

Sinon, si vous pouvez installer l'ancienne version de la bibliothèque à côté du nouveau, cela peut également faire fonctionner le programme. (Si vous êtes sûr qu'aucun autre programme n'utilise la version actuellement installée de la bibliothèque, vous pouvez le désinstaller avant d'installer l'ancien. S'il est fourni par un package Ubuntu, vous devez le faire en désinstallant ce package. Majeur versions d'une bibliothèque font souvent du soutien étant installé en même temps, cependant.)

Dans les cas où vous ne pouvez pas installer la version de bibliothèque dont le programme a besoin et que vous êtes prêt à accepter une instabilité sérieuse et un comportement imprévisible du programme, il est parfois possible de le faire fonctionner avec une nouvelle bibliothèque. et éditer les informations de version à l’intérieur avec un éditeur hexadécimal. Je l'ai déjà fait auparavant, mais je ne me suis jamais vraiment appuyé sur des logiciels conçus pour fonctionner de cette manière, et vous ne devriez pas non plus.

Cette réponse est délibérément générale. Sans plus de détails sur quelle programme a besoin de la bibliothèque, comment le programme est (ou peut être) installé, et quelles versions de la bibliothèque il supporte, il est probablement impossible de donner des conseils plus détaillés.


1
2017-11-12 06:35





D'après ce dont je me souviens dans Ubuntu, ajouter des liens symboliques dans / usr / local / lib peut ne pas suffire. Nous avons besoin de mettre à jour l’entrée ld.so.conf pour que ldconfig sache quels liens symboliques il doit créer pour nous.

Comme bodhi.zazen l’a mentionné, l’installation à partir d’apt est plus simple, car il est très probable qu’apt installe aussi des fichiers ld.so.conf.


0