Dans mon ordinateur portable:
$ cat /etc/issue
Ubuntu 18.04 LTS \n \l
Il existe deux dossiers différents pour les bibliothèques x86
et x86_64
:
~$ ls -1 /
bin
lib
lib64
sbin
...
Pourquoi pour les binaires existe un seul répertoire?
PS Je m'intéresse aussi à Android mais j'espère que la réponse devrait être la même.
linux
android
architecture
Gluttton
la source
la source
/bin
et/sbin
là. Quelle est la question? Vous demandez la différence entre/lib
et/lib64
?x86_64
(ni pour/bin
non pour/sbin
)./bin64
.wine*32
etwine*64
).Réponses:
Premièrement, pourquoi il y a séparé
/lib
et/lib64
:La norme de hiérarchie du système de fichiers mentionne que se séparent
/lib
et/lib64
existent parce que:Sur mon Slackware 14.2 par exemple , il y a
/lib
et/lib64
répertoires pour respectivement , même si 32 bits et bibliothèques 64 bits/lib
ne sont pas aussi un lien symbolique comme snippet FHS suggère:Il y a deux
libc.so.6
bibliothèques dans/lib
et/lib64
.Chaque dynamiquement construit binaire ELF contient un chemin codé en dur pour l'interprète, soit dans ce cas
/lib/ld-linux.so.2
ou/lib64/ld-linux-x86-64.so.2
:Le travail de l'interpréteur est de charger les bibliothèques partagées nécessaires. Vous pouvez demander à un interpréteur GNU quelles bibliothèques il chargerait sans même exécuter un binaire en utilisant
LD_TRACE_LOADED_OBJECTS=1
ou unldd
wrapper:Comme vous pouvez le voir, un interprète donné sait exactement où chercher les bibliothèques - la version 32 bits recherche les bibliothèques dans
/lib
et la version 64 bits recherche les bibliothèques dans/lib64
.La norme FHS dit ce qui suit sur
/bin
:OMI, la raison pour laquelle il n'y a pas de fichier séparé
/bin
et/bin64
c'est que si nous avions le fichier avec le même nom dans ces deux répertoires, nous ne pourrions pas appeler l'un d'eux indirectement car nous devions le mettre/bin
ou le/bin64
commencer$PATH
.Cependant, notez que ce qui précède n'est que la convention - le noyau Linux ne se soucie pas vraiment si vous avez séparé
/bin
et/bin64
. Si vous le souhaitez, vous pouvez les créer et configurer votre système en conséquence.Vous avez également mentionné Android - notez que, à l'exception de l'exécution d'un noyau Linux modifié, cela n'a rien à voir avec les systèmes GNU tels que Ubuntu - pas de glibc, pas de bash (par défaut, vous pouvez bien sûr le compiler et le déployer manuellement), ainsi que la structure du répertoire est complètement différent.
la source
ls -l
exemples ne sont pas particulièrement pertinents. Ce qui serait utile, c'est la sortie dels -l /lib /lib64
, qui montre probablement que/lib
lui - même est un lien symbolique.ls -ld
, et non,/lib
n'est pas un lien symbolique sur monSlackware 14.2
système.dfd029d25c58831bc5db671aec99a36f /lib64/libc.so.6
,987e7b736f316cc8da87ca2f38dae93e /lib/libc.so.6
.La raison en est que les répertoires lib / lib64 peuvent contenir des fichiers qui portent le même nom car ce sont des bibliothèques partagées avec divers programmes. Les placer dans des répertoires séparés résout le conflit. Il n'y a (généralement ...) aucune bonne raison de distribuer sur le même système des exécutables portant le même nom qui sont 32/64 bits, mais comme il peut y avoir un mélange d'exécutables, les bibliothèques partagées doivent être fournies.
la source