Erreur de chargement des bibliothèques partagées
Je suis sous eclipse sur Ubuntu à l'aide d'un compilateur g++ et je suis en train de lancer un exemple de programme qui utilise xerces.
L'accumulation produit pas d'erreurs, cependant, lorsque j'ai tenté d'exécuter le programme, je reçois cette erreur:
error while loading shared libraries: libxerces-c-3.1.so: cannot open shared object file: No such file or directory
libxerces-c-3.1.so
est dans le répertoire /opt/lib
que j'ai inclus une bibliothèque dans eclipse. Le fichier est là quand j'ai vérifié le dossier. Lorsque j'effectue une echo $LD_LIBRARY_PATH
, /opt/lib
est également répertoriés.
Toutes les idées de l'endroit où se trouve le problème? Merci.
Un ldd libxerces-c-3.1.so
commande génère la sortie suivante:
linux-vdso.so.1 => (0x00007fffeafff000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00007fa3d2b83000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa3d2966000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fa3d265f000)
libm.so.6 => /lib/libm.so.6 (0x00007fa3d23dc000)
libc.so.6 => /lib/libc.so.6 (0x00007fa3d2059000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fa3d1e42000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa3d337d000)
Vous devez vous connecter pour publier un commentaire.
Essayez d'exécuter
ldconfig
en tant que root pour voir si cela résout le problème.sudo ldconfig
mais cela ne fonctionne toujours pasJ'ai copié tous les fichiers de bibliothèque de /opt/lib dans /usr/lib et le programme fonctionne maintenant. Merci pour la réponse.
Exécuter
ldd libxerces-c-3.1.so
et examinez la sortie pour voir si toutes les dépendances peuvent être trouvés.Il y a beaucoup de façons de le faire, la plupart déjà mentionné ici. MAIS vous voulez éviter de copier accidentellement votre bibliothèque de fichiers dans/au-dessus de celles du système. C'est facile à faire puisque les gens ont peu d'imagination, en faisant origine des noms uniques pour leurs bibliothèques.
Donc, il ya un couple de choses à penser:
Pour trouver vos différents emplacements de la bibliothèque sur votre système (en dehors de l'aide à trouver), regardez ici:
Sur Linux il y a quelques endroits standard:
Il y a beaucoup d'autres, mais vous devriez probablement rester avec
/usr/local/lib
.Ensuite, vous devez dire à votre système où trouver ces bibliothèques. Le système frais de mec (qui sait ce qu'il fait) façon de le faire est d'utiliser
ldconfig
, cependant, vous pouvez faire des choses que vous regrettez, si vous faites une erreur ici. Le moyen le plus sûr à utiliser que la commande est en utilisant les drapeaux-v -n
de faire la commande détaillé et à spécifier ce répertoire de la bibliothèque, vous devez ajouter.Fait. Mais si vous voulez tester quelque chose, alors utilisez plutôt votre
LD_LIBRARY_PATH
directement à partir de la ligne de commande, comme ceci:Vous pouvez également ajouter ce qui suit à votre
.bashrc
script.Vous pouvez maintenant exécuter votre dynamiquement lié commande.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<your_lib_path>
m'a aidé à corrigerEssayez d'installer la bibliothèque libxerces-c3.1 comme. Utilisez la commande mentionnée ci-dessous pour installer la bibliothèque.
Cela a fonctionné comme un charme pour moi.