GNU/Linux >> Tutoriels Linux >  >> Linux

Erreur Linux lors du chargement des bibliothèques partagées :impossible d'ouvrir le fichier objet partagé :aucun fichier ou répertoire de ce type

Votre bibliothèque est une bibliothèque dynamique. Vous devez indiquer au système d'exploitation où il peut la localiser au moment de l'exécution.

Pour ce faire, nous devrons suivre ces étapes simples :

(1 ) Trouvez où se trouve la bibliothèque si vous ne la connaissez pas.

sudo find / -name the_name_of_the_file.so

(2) Vérifiez l'existence de la variable d'environnement de chemin de bibliothèque dynamique (LD_LIBRARY_PATH )

$ echo $LD_LIBRARY_PATH

s'il n'y a rien à afficher, ajoutez une valeur de chemin par défaut (ou pas si vous le souhaitez)

$ LD_LIBRARY_PATH=/usr/local/lib

(3) Nous ajoutons le chemin souhaité, l'exportons et essayons l'application.

Notez que le chemin doit être le répertoire où le path.so.something est.Donc si path.so.something est en /my_library/path.so.something ça devrait être :

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/
$ export LD_LIBRARY_PATH
$ ./my_app

source :http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html


Voici quelques solutions que vous pouvez essayer :

ldconfig

Comme AbiusX l'a souligné :si vous venez d'installer la bibliothèque, vous devrez peut-être simplement exécuter ldconfig.

sudo ldconfig

ldconfig crée les liens et le cache nécessaires vers les bibliothèques partagées les plus récentes trouvées dans les répertoires spécifiés sur la ligne de commande, dans le fichier /etc/ld.so.conf et dans les répertoires de confiance (/lib et /usr/lib).

Habituellement, votre gestionnaire de paquets s'en occupera lorsque vous installerez une nouvelle bibliothèque, mais pas toujours, et cela ne fera pas de mal d'exécuter ldconfig même si ce n'est pas votre problème.

Paquet de développement ou mauvaise version

Si cela ne fonctionne pas, je vérifierais également la suggestion de Paul et chercherais une version "-dev" de la bibliothèque. De nombreuses bibliothèques sont divisées en packages dev et non-dev. Vous pouvez utiliser cette commande pour le rechercher :

apt-cache search <libraryname>

Cela peut également aider si vous avez simplement installé la mauvaise version de la bibliothèque. Certaines bibliothèques sont publiées simultanément dans différentes versions, par exemple, Python.

Emplacement de la bibliothèque

Si vous êtes sûr que le bon paquet est installé et que ldconfig ne l'a pas trouvé, il se peut qu'il se trouve simplement dans un répertoire non standard. Par défaut, ldconfig regarde dans /lib , /usr/lib , et les répertoires répertoriés dans /etc/ld.so.conf et $LD_LIBRARY_PATH . Si votre bibliothèque est ailleurs, vous pouvez soit ajouter le répertoire sur sa propre ligne dans /etc/ld.so.conf , ajoutez le chemin de la bibliothèque à $LD_LIBRARY_PATH , ou déplacer la bibliothèque en /usr/lib . Ensuite, exécutez ldconfig .

Pour savoir où se trouve la bibliothèque, essayez ceci :

sudo find / -iname *libraryname*.so*

(Remplacer libraryname avec le nom de votre bibliothèque)

Si vous passez par le $LD_LIBRARY_PATH route, vous voudrez le mettre dans votre ~/.bashrc fichier pour qu'il s'exécute à chaque fois que vous vous connectez :

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library

Mettre à jour
Bien que ce que j'écris ci-dessous soit vrai en tant que réponse générale sur les bibliothèques partagées, je pense que la cause la plus fréquente de ce type de message est que vous avez installé un package, mais pas installé la version "-dev" de ce package.

Eh bien, ce n'est pas mentir - il n'y a pas de libpthread_rt.so.1 dans cette liste. Vous devrez probablement le reconfigurer et le reconstruire pour qu'il dépende de la bibliothèque dont vous disposez, ou installer ce qui fournit libpthread_rt.so.1 .

Généralement, les nombres après le .so sont des numéros de version, et vous trouverez souvent qu'ils sont des liens symboliques entre eux, donc si vous avez la version 1.1 de libfoo.so, vous aurez un vrai fichier libfoo.so.1.0, et les liens symboliques foo.so et foo.so.1 pointant vers libfoo.so.1.0. Et si vous installez la version 1.1 sans supprimer l'autre, vous aurez un libfoo.so.1.1, et libfoo.so.1 et libfoo.so pointeront maintenant vers le nouveau, mais tout code qui nécessite cette version exacte peut utilisez le fichier libfoo.so.1.0. Le code qui s'appuie uniquement sur l'API version 1, mais qui ne se soucie pas de savoir s'il s'agit de la version 1.0 ou 1.1 spécifiera libfoo.so.1. Comme orip l'a souligné dans les commentaires, cela est bien expliqué sur http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html.

Dans votre cas, vous pourriez s'en tirer avec le lien symbolique libpthread_rt.so.1 à libpthread_rt.so . Cependant, rien ne garantit qu'il ne cassera pas votre code et ne mangera pas vos dîners télévisés.


Linux
  1. Comment résoudre l'erreur "impossible d'ouvrir le fichier objet partagé" dans les distributions Linux basées sur Ubuntu

  2. Mkdir :impossible de créer un répertoire :aucun fichier ou répertoire de ce type ?

  3. rpm :erreur lors du chargement des bibliothèques partagées :en-tête ELF invalide

  4. Rpm :erreur lors du chargement des bibliothèques partagées :Libz.so.1 :impossible d'ouvrir le fichier d'objet partagé :aucun fichier de ce type

  5. cp :répertoire omis - erreur lors de la copie d'un répertoire sous Linux

Comment réparer l'erreur "pacman:erreur lors du chargement des bibliothèques partagées" dans Arch Linux

libaio.so.1 :impossible d'ouvrir le fichier objet partagé

libpulse.so.0 :impossible d'ouvrir le fichier objet partagé :aucun fichier ou répertoire de ce type

Erreur fatale :cuda.h :aucun fichier ou répertoire de ce type

Erreur d'importation :libcblas.so.3 :impossible d'ouvrir le fichier objet partagé :aucun fichier ou répertoire de ce type

conda.exe :erreur lors du chargement des bibliothèques partagées :libz.so.1