En fait ça dépend du ldd
la mise en oeuvre. ldd
est généralement un script, vous pouvez le modifier pour voir où et pourquoi vous obtenez cette erreur.
Sur Ubuntu 10.04, ldd
vérifie le read
autorisation seulement. Cela peut donner l'erreur pas un exécutable dynamique si le fichier n'est pas un ELF (Executable and Linkable Format ). Les bibliothèques ici sont toutes -rw-r--r--
, par exemple
$ find /usr/lib -type f -name "libm*.so*" -ls
(...)
-rw-r--r-- 1 root root 216800 Feb 26 22:20 /usr/lib/libmp.so.3.1.16
-rw-r--r-- 1 root root 76728 Mar 14 04:23 /usr/lib/libmjpegutils-1.9.so.0.0.0
-rw-r--r-- 1 root root 134464 Jan 29 2010 /usr/lib/libm17n-core.so.0.3.0
-rw-r--r-- 1 root root 290480 Feb 17 2010 /usr/lib/libmtp.so.8.3.2
Ce n'est pas choquant de vouloir un x
accès à une bibliothèque partagée. Le executable
mode est une convention qui donne au système d'exploitation un autre niveau de contrôle des droits d'accès. Le chargeur exécutable contrôle cet accès, pour s'assurer que l'utilisateur peut l'exécuter, mais aussi pour éviter les erreurs (certains scripts ou programmes ne doivent pas être exécutés par certaines personnes).
Cela pourrait être étendu aux bibliothèques partagées pour la même raison - mais les bibliothèques partagées ne peuvent pas exécuter par eux-mêmes, et sont moins susceptibles d'être utilisés par accident ). Ainsi le besoin est moins évident (le r
l'accès suffit).
Vous pouvez en fait exécuter de nombreuses bibliothèques, voyez par exemple ce qui se passe lorsque vous tapez /lib/libc.so.6
dans votre shell sur un système GNU/Linux récent.