Pourquoi /lib/libc.so.6 manque-t-il?

find | grep libc.so.6 

révèle qu’il se trouve dans /lib/i386-linux-gnu/libc.so.6 , mais un script que /lib/i386-linux-gnu/libc.so.6 s’attendait à ce qu’il soit directement sous /lib , alors pourquoi n’y a-t-il pas au moins un lien symbolique?

Est-ce que je risquerais de casser quelque chose si j’y mettais un lien symbolique?

libc.so été déplacé dans le cadre du travail multiarch dans Ubuntu 11.04. La raison pour laquelle il n’existe pas de lien symbolique est que le but de multiarch est de permettre l’installation amd64 versions i386 et amd64 de libc afin que vous puissiez exécuter plus facilement des fichiers binarys 32 bits sur 64 bits. systèmes de bits et vice versa (et d’autres situations similaires). Si le paquet libc6 contenait un lien symbolique vers le nouvel emplacement, les versions de ce paquet pour différentes architectures ne pourraient pas être installées simultanément (quelle version du lien symbolique serait-elle choisie par dpkg ?) .

Tout ce qui code le chemin d’access à libc.so doit être mis à jour pour fonctionner correctement à partir d’Ubuntu 11.04. Si le script dont vous parlez fait partie d’Ubuntu, veuillez signaler un bogue et append la balise multiarch .

Les bibliothèques dynamics sont chargées par le kernel, les chemins ne sont pas codés en dur dans un programme. Un programme dit juste “j’ai besoin de libc.so.6”. Le système recherche ensuite dans les chemins de bibliothèque définis dans /etc/ld.so.conf , y compris /usr/lib et /lib par défaut. Ce fichier comprend des fichiers de configuration supplémentaires dans /etc/ld.so.conf.d .

Sur mon système 64 bits, libc.so.6 trouverez /lib/x86_64-linux-gnu/libc.so.6 dans /lib/x86_64-linux-gnu/libc.so.6 raison du chemin défini dans /etc/ld.so.conf.d/x86_64-linux-gnu.conf :

 # Multiarch support /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu 

Pour savoir quelle bibliothèque est chargée par un programme, utilisez ldd comme dans ldd /bin/bash :

  linux-vdso.so.1 => (0x00007ffff1dff000) libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000) /lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000) 

Mettre le lien symbolique ne casserait rien.

Pour obtenir une liste des répertoires recherchés, exécutez:

 ldconfig -v -N | grep '^/' 

-v fait apparaître une liste de fichiers + répertoires, -N empêche la /etc/ld.so.cache du cache ( /etc/ld.so.cache ).

Ajoutez simplement un lien symbolique au fichier libc.so.6 comme suit:

 sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6 

Il en va de même pour les autres fichiers manquants encore présents sur le système. Dans mon cas, le fichier manquait à Matlab. Le problème a maintenant disparu.