Je soupçonne que c'est probablement juste pour des raisons historiques.
La réponse de BlueBomber est probablement historiquement correcte, mais ce n'est pas vraiment nécessaire pour que les objets partagés soient exécutables.
Sur mon système Ubuntu, ils ne le sont pas. Sur les 30 /lib/*.so*
et 600 /usr/lib/*.so*
fichiers, un seul a des autorisations d'exécution, et c'est probablement juste un problème.
L'autorisation d'exécution permet à un fichier d'être exécuté via l'un des exec*()
les fonctions; les fichiers d'objets partagés contiennent du code exécutable, mais ils ne sont pas exécutés de cette manière.
D'autre part, sur un système CentOS 5.7 auquel j'ai accès, ces fichiers sont exécutable ; il en va de même sur un système SPARC Solaris 9. (Il serait intéressant d'essayer de désactiver les autorisations exécutables sur certains de ces fichiers pour voir si cela casse quoi que ce soit, mais je ne suis pas en mesure de le faire.)
(Quelle distribution Linux utilisez-vous ?)
MISE À JOUR :
Cette réponse à cette question montre un exemple (HP-UX) d'un système où le bit d'exécution est réellement requis. Cela ne semble pas être le cas sous Linux, où certaines distributions définissent le bit d'exécution (probablement par inertie historique) et d'autres non. Ou peut-être que certains Linux en ont réellement besoin.
Autre point de données :sur mon système Ubuntu, j'ai juste essayé de créer mon propre fichier objet partagé. Le fichier "libfoo.so" généré a été créé avec des autorisations d'exécution, mais si je chmod -x
manuellement elle, le programme qui l'utilise fonctionne toujours.
Dans tous les cas, définir l'autorisation d'exécution sur *.so
est généralement inoffensif (et certainement moins ennuyeux que, par exemple, la définition de l'autorisation d'exécution sur les fichiers source).
MISE À JOUR 2 :
Comme le souligne fwyzard dans un commentaire, certains *.so
les fichiers peuvent réellement être exécutés. Par exemple, sur mon système actuel, en exécutant /lib/x86_64-linux-gnu/libc-2.27.so
imprime les informations de version pour la bibliothèque GNU C. /lib/x86_64-linux-gnu/libpthread-2.27.so
se comporte de la même manière.