No meu laptop:
$ cat /etc/issue
Ubuntu 18.04 LTS \n \l
Existem duas pastas diferentes para bibliotecas x86
e x86_64
:
~$ ls -1 /
bin
lib
lib64
sbin
...
Por que para binários existe apenas um diretório?
PS: Também estou interessado no Android, mas espero que a resposta seja a mesma.
linux
android
architecture
Gluttton
fonte
fonte
/bin
e/sbin
lá. Qual é a pergunta? Você está perguntando sobre a diferença entre/lib
e/lib64
?x86_64
(nem para/bin
não/sbin
)./bin64
.wine*32
ewine*64
).Respostas:
Primeiro, por que existem separados
/lib
e/lib64
:O padrão de hierarquia do sistema de arquivos menciona que se separam
/lib
e/lib64
existem porque:No meu Slackware 14.2, por exemplo, existem
/lib
e/lib64
diretórios para bibliotecas de 32 e 64 bits, respectivamente, mesmo que/lib
não sejam um link simbólico, como sugere o snippet do FHS:Existem duas
libc.so.6
bibliotecas em/lib
e/lib64
.Cada binário ELF construído dinamicamente contém um caminho codificado para o intérprete, neste caso
/lib/ld-linux.so.2
ou/lib64/ld-linux-x86-64.so.2
:O trabalho do intérprete é carregar as bibliotecas compartilhadas necessárias. Você pode perguntar a um intérprete GNU que bibliotecas ele carregaria sem nem mesmo executar um uso binário
LD_TRACE_LOADED_OBJECTS=1
ou umldd
wrapper:Como você pode ver, um determinado intérprete sabe exatamente onde procurar bibliotecas - a versão de 32 bits procura por bibliotecas
/lib
e a versão de 64 bits procura por bibliotecas/lib64
.O padrão FHS diz o seguinte sobre
/bin
:IMO a razão pela qual não há separada
/bin
e/bin64
é que, se tivéssemos o arquivo com o mesmo nome em ambos os diretórios que não poderia chamar um deles indiretamente, porque teríamos de colocar/bin
ou/bin64
pela primeira vez em$PATH
.No entanto, observe que o exposto acima é apenas a convenção - o kernel do Linux realmente não se importa se você tiver separado
/bin
e/bin64
. Se você os quiser, poderá criá-los e configurar seu sistema de acordo.Você também mencionou o Android - observe que, exceto para a execução de um kernel Linux modificado, ele não tem nada a ver com sistemas GNU como o Ubuntu - no glibc, no bash (por padrão, é claro que você pode compilar e implantar manualmente) e também a estrutura de diretórios é completamente diferente.
fonte
ls -l
exemplos não são particularmente relevantes. O que seria útil é a saída dels -l /lib /lib64
, o que provavelmente mostra que/lib
ele próprio é um link simbólico.ls -ld
, e não,/lib
não é um link simbólico no meuSlackware 14.2
sistema.dfd029d25c58831bc5db671aec99a36f /lib64/libc.so.6
,987e7b736f316cc8da87ca2f38dae93e /lib/libc.so.6
.O motivo é que os diretórios lib / lib64 podem conter arquivos com o mesmo nome, porque são bibliotecas compartilhadas com diversos programas. Colocá-los em diretórios separados resolve o conflito. Não há (normalmente ...) uma boa razão para distribuir executáveis com o mesmo nome no mesmo sistema com 32/64 bits, mas como pode haver uma mistura de executáveis, as bibliotecas compartilhadas precisam ser fornecidas.
fonte