416 votes

Linux error while loading shared libraries: impossible d'ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire

Le programme fait partie de la Xenomai de la suite de tests, cross-compilé à partir de PC Linux dans Linux+Xenomai BRAS de la chaîne.

# echo $LD_LIBRARY_PATH                                                                                                                                          
/lib                                                                                                                                                             
# ls /lib                                                                                                                                                        
ld-2.3.3.so         libdl-2.3.3.so      libpthread-0.10.so                                                                                                       
ld-linux.so.2       libdl.so.2          libpthread.so.0                                                                                                          
libc-2.3.3.so       libgcc_s.so         libpthread_rt.so                                                                                                         
libc.so.6           libgcc_s.so.1       libstdc++.so.6                                                                                                           
libcrypt-2.3.3.so   libm-2.3.3.so       libstdc++.so.6.0.9                                                                                                       
libcrypt.so.1       libm.so.6                                                                                                                                    
# ./clocktest                                                                                                                                                    
./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory

Edit: OK je n'avais pas remarqué le .1 à la fin a été une partie du nom de fichier. Ce que ça veut dire de toute façon?

396voto

XOR Points 111

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

Pour ce faire, nous aurons besoin de faire ces étapes faciles:

(1 ) Trouver où la bibliothèque est placée si vous ne le connaissez pas.

cd /
sudo find ./ | grep the_name_of_the_file.so

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

$ echo $LD_LIBRARY_PATH

si il n'y a rien à afficher, nous devons ajouter le chemin d'accès par défaut la valeur (ou pas comme vous wich)

$ LD_LIBRARY_PATH=/usr/local/lib

(3) Nous ajoutons le désir de chemin et de les exporter et d'essayer l'application

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/path.so.something
$ export LD_LIBRARY_PATH
$ ./my_app

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

148voto

Paul Tomblin Points 83687

Mise à jour de Tout ce que j'écris ci-dessous est vrai qu'une 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 parce que vous avez installé un paquet, mais il n'est pas installé "-dev" version de ce paquet.

Eh bien, ce n'est pas couché - il n'y a pas d' libpthread_rt.so.1 dans cette annonce. Vous avez probablement besoin de re-configurer et de re-construire pour qu'il dépend de la bibliothèque que vous avez, ou installer quoi que fournit libpthread_rt.so.1.

Généralement, le nombre après la .ainsi sont les numéros de version, vous trouverez souvent qu'ils sont des liens symboliques vers les uns des autres, donc si vous avez la version 1.1 de libfoo.ainsi, vous aurez un fichier réel libtruc..1.0, et des liens symboliques de foo.donc, et foo..1 pointant vers le libtruc..1.0. Et si vous installez la version 1.1 sans supprimer l'autre, vous aurez un libtruc..1.1, et libtruc..1 et libtruc.donc maintenant pointer vers le nouveau, mais le code qui exige que la version exacte pouvez utiliser le libtruc..1.0 fichier. Le Code qui s'appuie sur la version 1 de l'API, mais ne se soucie pas si c'est 1.0 ou 1.1 spécifier libtruc..1. Comme orip souligné dans les commentaires, c'est bien expliqué à http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html.

Dans votre cas, vous pourriez sortir avec lier celui - libpthread_rt.so.1 de libpthread_rt.so. Aucune garantie que ça ne cassera pas votre code et de manger vos télés, cependant.

27voto

AnkitM Points 1

Essayez d'ajouter export LD_LIBRARY_PATH=path_to_your_library dans ~/.bashrc

Il fonctionne!

13voto

Employed Russian Points 50479

L'linux.org page de référence explique la mécanique, mais n'explique pas tout de la motivation qui est derrière :-(

Pour cela, voir le Soleil de l'éditeur de liens et les Bibliothèques Guide

En outre, notez que les "externes versioning" est largement obsolète sur Linux, parce que les versions de symboles (une extension GNU) permet de disposer de plusieurs versions incompatibles de la même fonction, à être présent dans une seule bibliothèque. Cette extension a permis la glibc d'avoir la même version externe: libc.so.6 pour les 10 dernières années.

2voto

zajac.m2 Points 348

essayez d'installer sudo lib32z1

sudo apt-get install lib32z1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X