GNU/Linux >> Tutoriels Linux >  >> Ubuntu

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

Il existe une liste d'erreurs courantes que je vois souvent dans Ubuntu. Il y a problème avec merge liste, alors il y a BADSIG erreur, et un certain nombre d'erreurs courantes de mise à jour d'Ubuntu.

L'une de ces erreurs courantes que je vois souvent lors de l'installation d'un programme à partir de son code source est erreur lors du chargement des bibliothèques partagées . L'erreur complète ressemble généralement à ceci :

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

Par exemple, j'essayais d'utiliser le serveur FreeRADIUS et il m'a montré cette erreur :

radiusd: error while loading shared libraries:
libfreeradius-radius-2.1.10.so:
cannot open shared object file: No such file or directory

La raison de cette erreur est que les bibliothèques du programme ont été installées à un endroit où l'éditeur de liens dynamique ne peut pas le trouver.

Laissez-moi vous montrer comment résoudre ce problème.

Réparer ing "impossible d'ouvrir le fichier d'objet partagé :aucun fichier ou répertoire de ce type" erreur

Un moyen rapide de corriger automatiquement cette "erreur lors du chargement des bibliothèques partagées" consiste à utiliser ldconfig.

Tout ce que vous avez à faire est d'ouvrir le terminal (Ctrl+Alt+T) et de taper la commande suivante :

sudo /sbin/ldconfig -v

Cette doublure devrait résoudre le problème dans la plupart des cas. Cependant, si ce n'est pas le cas, j'ai discuté d'une autre méthode pour gérer cette erreur. Mais avant cela, laissez-moi vous dire ce que fait la commande ci-dessus.

Qu'est-ce qu'un fichier objet partagé ? Comment la commande ci-dessus résout-elle le problème ?

Vous voyez, en C/C++, un .so (objet partagé) est un fichier de bibliothèque compilé. Il est appelé objet partagé car ce fichier de bibliothèque peut être partagé par plusieurs programmes. Ces bibliothèques générées sont généralement situées dans les répertoires /lib ou /usr/lib.

Maintenant, si vous vous demandez comment cette petite commande a résolu ce problème, vous devriez lire la page de manuel de ldconfig qui dit :

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 ). Le cache est utilisé par l'éditeur de liens d'exécution, ld.so ou ld-linux.so . ldconfig vérifie l'en-tête et les noms de fichiers des bibliothèques rencontrées lors de la détermination des versions dont les liens doivent être mis à jour.

J'espère que cette solution rapide vous aidera à éliminer la méchante erreur lors du chargement du message des bibliothèques partagées sous Ubuntu et autres Linux.

Si ce n'est pas le cas, vous pouvez faire une enquête et essayer de résoudre le problème comme il est mentionné dans la section suivante.

Méthode alternative pour corriger l'erreur "impossible d'ouvrir le fichier d'objet partagé"

La méthode décrite ci-dessus résout le problème si la bibliothèque en question est disponible sur votre système. Mais ce n'est pas toujours le cas.

Si le programme n'est pas installé sur votre système, vous n'aurez pas son fichier de bibliothèque. Le ldconfig ne peut rien faire s'il n'y a pas de fichier de bibliothèque en premier lieu.

Ainsi, la méthode alternative consiste à installer le programme requis et il devrait créer la bibliothèque automatiquement.

Permettez-moi de vous le montrer par un exemple. Supposons que vous voyez cette erreur :

error while loading shared libraries: libgobject-2.0.so.0: cannot open shared object file: No such file or directory

Le problème vient de la version 2.0 de libgobject. Le numéro de version est important car certains programmes dépendent d'une version spécifique de la bibliothèque et s'ils ne trouvent pas, ils s'en plaignent.

Désormais, apt fournit l'option de recherche qui peut être utilisée pour rechercher un paquet et connaître sa version avant de l'installer.

[email protected]:~$ apt search libgobject
Sorting... Done
Full Text Search... Done
librust-gobject-sys-dev/focal 0.9.0-2 amd64
  FFI bindings to libgobject-2.0 - Rust source code

Maintenant, ce paquet librust-gobject-sys-dev pourrait être ce dont vous avez besoin si vous savez que vous essayez d'exécuter un programme Rust. Mais que se passerait-il si c'était un programme Python que vous exécutiez qui s'en plaignait ?

Vous pouvez élargir votre recherche en supprimant la bibliothèque du nom du package lors de la recherche. La lib signifie bibliothèque et les bibliothèques peuvent être fournies par un package générique qui pourrait être nommé gobject-xyz.

Ce serait une bonne idée de rechercher la chaîne dans les noms du package (au lieu de la description) pour obtenir des résultats plus concis.

[email protected]:~$ apt search --names-only gobject
Sorting... Done
Full Text Search... Done
gobject-introspection/focal-updates 1.64.1-1~ubuntu20.04.1 amd64
  Generate interface introspection data for GObject libraries

libavahi-gobject-dev/focal 0.7-4ubuntu7 amd64
  Development headers for the Avahi GObject library

libavahi-gobject0/focal 0.7-4ubuntu7 amd64
  Avahi GObject library

libcairo-gobject-perl/focal,now 1.005-2 amd64 [installed,automatic]
  integrate Cairo into the Glib type system in Perl

libcairo-gobject2/focal,now 1.16.0-4ubuntu1 amd64 [installed,automatic]
  Cairo 2D vector graphics library (GObject library)

libghc-gi-gobject-dev/focal 2.0.19-1build1 amd64
  GObject bindings

libghc-gi-gobject-doc/focal,focal 2.0.19-1build1 all
  GObject bindings; documentation

Dans la sortie tronquée ci-dessus, vous devrez voir si le package est lié au programme d'origine que vous essayez d'exécuter. Vous devez également vérifier la version de la bibliothèque fournie.

Une fois que vous avez identifié le bon package, installez-le comme ceci :

sudo apt install package_name

Une fois installé, vous pouvez relancer la commande ldconfig pour mettre à jour le cache :

sudo /sbin/ldconfig -v

Cette méthode nécessite un certain effort de votre part, mais c'est ainsi que les dépendances sont gérées.

Rien ne fonctionne, et maintenant ?

Si vous avez la malchance, les méthodes ci-dessus pourraient ne pas fonctionner pour vous. Que pouvez-vous faire ?

Tout d'abord, gardez à l'esprit que les bibliothèques partagées peuvent être utilisées à partir d'autres packages dans certains cas. Si vous essayez d'exécuter le programme XYZ et que le programme ABC installe la version correcte de la bibliothèque partagée, cela peut (ou non) fonctionner pour vous. Vous pouvez lui donner un coup et l'essayer.

Deuxièmement, si vous essayez d'exécuter un programme qui est trop ancien ou trop nouveau, il peut nécessiter une version de bibliothèque qui n'est pas disponible pour votre distribution Linux.

Ce que vous pouvez faire est de vérifier si vous pouvez utiliser une autre version du programme. Par exemple, en utilisant la version 3 d'Eclipse au lieu de la version 4. Cela peut aider votre cas.

L'autre façon serait de consulter le site Web ou les forums des développeurs et de voir si vous pouvez installer manuellement la version correcte de la bibliothèque à partir de son code source. Cela demande beaucoup d'efforts (en 2020) mais vous n'avez pas beaucoup d'options.

Cela a-t-il fonctionné pour vous ?

J'espère vous avoir éclairci un peu les choses. Avez-vous réussi à résoudre le problème des bibliothèques partagées sur votre système ? Si vous avez des questions, des suggestions, n'hésitez pas à laisser un commentaire. Ciao :)



Ubuntu
  1. Ubuntu - Comment ouvrir un fichier .bak sous Linux ?

  2. Comment configurer les messages d'erreur xdebug pour ouvrir le fichier dans l'éditeur Kate sur Ubuntu

  3. "Erreur lors du chargement des bibliothèques partagées :libjli.so :impossible d'ouvrir le fichier d'objet partagé :aucun fichier ou répertoire de ce type" Erreur "java -version" au démarrage

  4. 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

  5. libstdc++.so.5 :impossible d'ouvrir le fichier objet partagé - mais la bibliothèque est installée et à jour

Comment utiliser une commande de fichier sous Linux

Comment ouvrir un fichier sous Linux

Comment changer la limite de fichiers ouverts sous Linux

Comment résoudre:erreur:pas de sauvetage grub de partition de ce type dans Ubuntu Linux

Comment installer le dernier Kodi sur les distributions Linux basées sur Ubuntu

Comment réparer l'erreur "Le référentiel n'est pas encore valide" dans Ubuntu Linux