web-dev-qa-db-fra.com

erreur ldconfig: n'est pas un lien symbolique

Lors de l'exécution:

    Sudo /sbin/ldconfig

l'erreur suivante apparaît:

    /sbin/ldconfig: /usr/local/lib/ is not a symbolic link

Lorsque j'exécute un fichier:

    file /usr/local/lib/
    /usr/local/lib/: directory

À l'intérieur /usr/local/lib/ il y a trois bibliothèques que j'utilise. Je vais les appeler ici comme lib1, lib2 et lib3.

Maintenant, quand je fais un ldd sur mon binaire, il en résulte:

    lib1.so => not found
    lib2.so => not found
    lib3.so => /usr/local/lib/lib3.so (0x00216000)

Mais tous sont alors dans le même dossier que /usr/local/lib/{lib1,lib2,lib3}.so.

Chaque fois que je lance ldconfig, la même erreur apparaît:

/usr/local/lib/ is not a symbolic link

J'ai pensé /usr/local/lib doit être déclaré deux fois dans /etc/ld.conf.d/*.conf, mais non:

    Sudo egrep '\/usr\/local' /etc/ld.so.conf.d/*
    projectA.conf.old:/usr/local/projectA/lib
    local.conf:/usr/local/lib

ld.so.conf comprend uniquement /etc/ld.so.conf.d/*.conf, donc ça *.old n'est pas traité et fait référence à /usr/local/projectA/lib.

Après un temps, j'ai supprimé toutes les lib1 et lib2 (à un moment donné, je les ai testées sur le dossier binaire), la même erreur se produit.

36
Rodrigo Gurgel

J'ai rencontré ce problème avec le client Oracle 11R2. Je ne sais pas si le programme d'installation Oracle a fait cela ou si quelqu'un l'a fait ici avant mon arrivée. Ce n'était pas 64 bits vs 32 bits, tout était 64 bits.

L'erreur était que libexpat.so.1 n'était pas un lien symbolique.

Il s'est avéré qu'il y avait deux fichiers identiques, libexpat.so.1.5.2 et libexpat.so.1. Supprimer le fichier incriminé et en faire un lien symbolique vers la version 1.5.2 a provoqué la disparition de l'erreur.

Il est logique que vous souhaitiez que le nom connu soit un lien symbolique vers la version actuelle. Si vous faites cela, il est moins probable que vous vous retrouviez avec une bibliothèque périmée.

38
Dan Pritts

Résolu, au moins au point de la question.

J'ai cherché sur le Web avant de demander, il n'y avait pas de solution concluante, la raison pour laquelle cette erreur est: lib1.so et lib2.so ne sont pas OK, très probablement où elles n'ont pas été compilées pour un PC 64, mais pour une machine 32 bits sinon lib3.so est une bibliothèque 64 bits. C'est du moins mon hipothèse.

TRÈS malheureusement, ldconfig ne donne pas de message d'erreur clair informant qu'il n'a pas pu charger la bibliothèque, il pompe uniquement:

ldconfig:/folder_where_the_wicked_lib_is/n'est pas un lien symbolique

J'ai résolu ce problème en supprimant les bibliothèques non trouvées par ldd sur le binaire. Il est maintenant plus facile de savoir où se situe le problème.

Ma version ld: GNU ld version 2.20.51, et je ne sais pas si une version la plus récente a un meilleur message pour ses utilisateurs.

Merci.

5
Rodrigo Gurgel

J'ai simplement exécuté la commande ci-dessous:

export LD_LIBRARY_PATH=/usr/lib/

Maintenant ça fonctionne bien.

2

Vous devez inclure le chemin des bibliothèques dans /etc/ld.so.conf et réexécuter ldconfig pour mettre à jour la liste

Une autre possibilité consiste à inclure dans la variable env LD_LIBRARY_PATH le chemin d'accès à votre bibliothèque et à réexécuter l'exécutable.

vérifier les liens symboliques s'ils pointent vers une bibliothèque valide ...

Vous pouvez ajouter le chemin directement dans /etc/ld.so.conf, sans inclure ...

courir ldconfig -p pour voir si votre bibliothèque est bien incluse dans le cache.

2
alinsoar

exécution simple dans Shell: Sudo apt-get install --reinstall libexpat1
a eu le même problème avec libxcb - résolu de cette façon - très rapide :)

0
Maxim Akristiniy