Arch: não é possível usar o pacman: error ao carregar bibliotecas compartilhadas

5

Acabei de instalar o Arch e configurar minha conexão sem fio. Eu queria instalar pacotes adicionais, então eu tentei usar o pacman.

Mas a cada comando que uso, recebo o seguinte erro:

pacman: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or library.

Mas em / usr / local / lib eu tenho os seguintes arquivos / pastas:

libcurl.a libcurl.a libcurl.so libcurl.so.4 libcurl.so.4.2.o pkgconfig

Então, como eu aponto o pacman para esses arquivos?

    
por Foezjie 07.07.2012 / 20:32

2 respostas

5

Não sei por que seus arquivos libcurl.* estão em /usr/local/lib , mas os meus estão em /usr/lib onde deveriam estar. Para confirmar que ldconfig não está encontrando, use

ldconfig -p | grep curl

Ele não deve imprimir nada, se isso acontecer, verifique o número da versão, você pode ter obtido a versão errada.

Para corrigir isso, você precisa informar ldconfig onde encontrar as bibliotecas. Você pode colocar um link simbólico de /usr/lib nos arquivos apropriados em /usr/local/lib , ou você pode dizer a ldconfig para procurar lá diretamente:

echo /usr/local/lib | sudo tee -a /etc/ld.so.conf.d/local.conf

Em seguida, execute sudo ldconfig para atualizar o cache.

E talvez tente descobrir por que suas bibliotecas estão no diretório errado.

    
por 07.07.2012 / 20:51
3

Você precisa descobrir onde está procurando libcurl (e não encontrá-lo), já que obviamente não está verificando /usr/local/lib . Primeiro, eu recomendo rodar o ldd para ver se alguma outra biblioteca está faltando:

ldd $(which pacman)

Espero que você tenha strace instalado, porque essa será sua próxima ferramenta para descobrir onde ele está procurando libcurl arquivos.

strace  -e open -o strace.log $(which pacman)

Depois de executar isso, less strace.log e veja quais arquivos ele tentou abrir, e isso ajudará você a determinar onde ele está procurando. Uma solução rápida e suja seria copiar (ou ligar simbolicamente) os arquivos apropriados de /usr/local/lib para onde está procurando.

Aqui está o que eu recebi quando strace'd wget :

open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libidn.so.11", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/etc/wgetrc", O_RDONLY)           = 3
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
open("/usr/share/locale/\"en_US/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/\"en/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/\"en_US/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/\"en/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en\"/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en\"/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    
por 07.07.2012 / 20:45

Tags