Por que o /lib/libc.so.6 está faltando?

18
find | grep libc.so.6

revela que está em /lib/i386-linux-gnu/libc.so.6 , mas um script que eu estava executando esperava que ele estivesse diretamente abaixo de /lib , então por que não há pelo menos um link simbólico?

Eu arriscaria quebrar alguma coisa se eu colocasse um symlink lá?

    
por Erik B 05.05.2011 / 19:00

3 respostas

21

libc.so foi movido como parte do trabalho multiarch no Ubuntu 11.04. A razão pela qual não pode haver um symlink é que o propósito do multiarch é possibilitar a instalação de ambas as versões i386 e amd64 de libc ao mesmo tempo, para que você possa executar 32 bits binários mais facilmente em sistemas de 64 bits e vice-versa (e outras situações semelhantes). Se o pacote libc6 contivesse um link simbólico para o novo local, as versões desse pacote para arquiteturas diferentes não seriam instaláveis ​​ao mesmo tempo (qual versão do symlink seria dpkg pick?), Derrotando todo o ponto do exercício.

Qualquer coisa que codifique o caminho para libc.so deve ser atualizada para funcionar corretamente a partir do Ubuntu 11.04. Se o script que você está falando fizer parte do Ubuntu, por favor relate um bug nele e adicione a tag multiarch .

    
por Colin Watson 05.05.2011 / 21:53
9

Bibliotecas dinâmicas são carregadas pelo kernel, os caminhos não são codificados em um programa. Um programa apenas diz "Eu preciso de libc.so.6". Em seguida, o sistema pesquisa em caminhos de biblioteca, conforme definido em /etc/ld.so.conf , incluindo /usr/lib e /lib por padrão. Este arquivo inclui arquivos de configuração adicionais em /etc/ld.so.conf.d .

No meu sistema de 64 bits, libc.so.6 pode ser encontrado em /lib/x86_64-linux-gnu/libc.so.6 devido ao caminho definido em /etc/ld.so.conf.d/x86_64-linux-gnu.conf :

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

Para descobrir qual biblioteca é carregada por um programa, use ldd como em 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)

Colocar o link simbólico não quebraria nada.

Para obter uma lista de diretórios pesquisados, execute:

ldconfig -v -N | grep '^/'

-v faz com que uma lista de arquivos + diretórios seja mostrada, -N impede que o cache ( /etc/ld.so.cache ) seja recriado.

    
por Lekensteyn 05.05.2011 / 19:29
5

Basta adicionar o symlink ao arquivo libc.so.6 da seguinte forma:

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

O mesmo vale para outros arquivos ausentes ainda no sistema, no meu caso o Matlab estava faltando o arquivo, o problema se foi agora.

    
por Robert Hughes 09.10.2011 / 18:25

Tags