Les utilisateurs de Linux rencontrent souvent l'erreur de chargement des bibliothèques partagées
lorsqu'ils exécutent des programmes. Cette erreur est également connue de nombreux programmeurs et de toute personne souhaitant compiler des logiciels sur leur système. Littéralement, cela signifie qu'il y a un problème lors du chargement des bibliothèques partagées.
L'erreur"error while loading shared libraries
" signifie que lors de l'exécution d'un programme ou d'un script, le système d'exploitation n'a pas pu trouver et charger une ou plusieurs bibliothèques nécessaires au fonctionnement de ce programme. Il s'agit d'un problème courant dans les systèmes d'exploitation de type UNIX. Lorsqu'un programme est compilé, il peut faire référence à diverses bibliothèques externes qui devraient être disponibles au moment de l'exécution. Si ces bibliothèques sont manquantes ou indisponibles, une erreur se produit lors du chargement des bibliothèques partagées.
Même si vous ne compilez pas vos programmes, vous pouvez rencontrer cette erreur : directory_name : cannot open shared object file : No such file or directory
assez souvent lors de l'installation de nouveaux programmes qui ne passent pas par le gestionnaire de paquets ou de programmes destinés à une autre distribution. Cette erreur est due au fait que le système ne trouve pas la bibliothèque. Pourquoi ne peut-elle pas être trouvée et chargée ?
Il y a plusieurs raisons à cela, mais en général, il s'agit d'une bibliothèque qui :
Lorsque nous résoudrons le problème, nous nous laisserons guider par ces raisons et nous essaierons de les résoudre.
Examinons ensuite des exemples concrets de résolution de ce problème en fonction des raisons mentionnées dans le paragraphe précédent.
Il n'y a rien de compliqué ici et tout est très clair - la bibliothèque n'est tout simplement pas présente dans le système, c'est pourquoi nous obtenons cette erreur. C'est pourquoi nous devons trouver le paquetage de la bibliothèque à l'aide d'un gestionnaire de paquets et l'installer. En général, les paquets contenant des bibliothèques sont appelés de la même manière que les bibliothèques elles-mêmes, avec le préfixe lib
.
S'il nous manque la bibliothèque libfuse2.so
, nous pouvons la trouver dans Ubuntu avec cette commande :
$ sudo apt search libfuse2
Il ne reste plus qu'à l'installer :
$ sudo apt install libfuse2
Lorsque vous devez construire un programme à partir des sources, vous devez également installer les fichiers d'en-tête :
$ sudo apt install libfuse-dev
Et ainsi de suite pour n'importe quelle bibliothèque. Mais cela ne fonctionne pas toujours.
Dans la pratique, il arrive que la bibliothèque soit installée, mais que l'erreur persiste et ne permette pas aux utilisateurs d'interagir normalement avec le système. Que faire dans ce cas ? Tout d'abord, vérifiez le chargeur d'amorçage Linux qui ne trouve pas la bibliothèque. La recherche doit être effectuée dans les répertoires spécifiés dans les fichiers de configuration /etc/ld.conf.d/
. En règle générale, il s'agit de /usr/lib, /lib, /usr/lib64, /lib64
. Si la bibliothèque est installée dans un autre répertoire, c'est évidemment la source du problème.
Vous pouvez voir quelles sont les bibliothèques actuellement disponibles pour le chargeur en utilisant la commande :
$ ldconfig -p
Trouvez l'emplacement de votre bibliothèque à l'aide de la commande locate
. Par exemple, nous sommes intéressés par la bibliothèque librtfreader.so :
$ locate librtfreader
Lorsque nous connaissons l'emplacement de /opt/kingsoft/wps-office/office6/
, nous devons faire en sorte que le chargeur puisse détecter la bibliothèque. Nous ajoutons le chemin /etc/ld.so.conf.d/
au fichier de configuration ou à la variable LD_LIBRARY_PATH
:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
Vous pouvez installer n'importe quelle bibliothèque qui provoque l'erreur. Vous pouvez également opter pour la solution la moins compliquée qui consiste à créer un lien symbolique vers la bonne bibliothèque dans le bon répertoire :
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
Ce problème survient généralement lorsque vous utilisez des programmes pour une distribution que vous n'avez pas installée. Chaque bibliothèque possède une version supplémentaire, qui est écrite après l'extension .so.
Par exemple, libav.so.1
. Le numéro de version change chaque fois qu'une bibliothèque est corrigée.
Il arrive souvent que dans une distribution, un programme soit construit avec une bibliothèque dépendante, telle que libc .so.1
, et que dans une autre distribution, il n'y ait que libc.so.2
. Dans la plupart des cas, les différences sont minimes et le programme peut fonctionner avec la deuxième version de la bibliothèque. Nous pouvons donc simplement créer un lien symbolique vers celle-ci.
Par exemple, il n'existe pas de bibliothèque libusb-1.0.so.1
. Mais il y a libusb-1.0.so.0.1
, et nous pouvons l'utiliser :
Pour ce faire, nous créons simplement un lien symbolique vers la bibliothèque :
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Souvent, le programme ne remarquera pas la substitution et fonctionnera. Comme solution intelligente, essayez de trouver la bonne version de la bibliothèque sur Internet pour votre architecture et placez-la dans le dossier /usr/lib/
ou /usr/lib64/
. Mais après cela, il est souhaitable de mettre à jour le cache :
$ sudo ldconfig
Si le problème persiste après ces étapes, il est recommandé de se référer à la documentation du programme ou du système d'exploitation pour obtenir des informations plus détaillées sur les versions de bibliothèques requises et sur la manière de les installer.