Satisfazendo a dependência de lib

3

Eu tenho um programa (que eu chamarei de foo here) compilado para x64 (meu arco atual). Quando tento executá-lo, vai:

./foo: error while loading shared libraries: libgmp.so.3: cannot open shared object file: No such file or directory

Parte relevante de locate output:

/usr/lib/x86_64-linux-gnu/libgmp.so 
/usr/lib/x86_64-linux-gnu/libgmp.so.10
/usr/lib/x86_64-linux-gnu/libgmp.so.10.1.3

Olhando em volta, eu encontrei a pergunta Mint: maneira correta de instalar /lib/i386-linux-gnu/libgmp.so.3 , cujo autor diz:" Eu tenho um binário de 32 bits que precisa de libgmp.so.3 em uma instalação x86_64 " Nesse segmento, eles sugerem instalar o pacote do Ubuntu compilado para a versão de 32 bits, o que eu fiz, apenas para adicionar /usr/lib/libgmp.so.3 e /usr/lib/libgmp.so.3.5.2 a locate libgmp e (como seria de se esperar) alterar o erro para

./foo: error while loading shared libraries: libgmp.so.3: wrong ELF class: ELFCLASS32

Então eu escrevi o autor binário, que muito validamente recompilou, mas me escreveu dizendo que a biblioteca agora tem 140 MB, então a melhor opção é eu recompilar a mim mesmo.

Por que a dependência binária de libgmp.so.3 não é satisfeita por libgmp.so.10 ?

Isso significa que o software depende apenas de uma determinada versão da biblioteca? Isso não poderia ser "soft-coded"?

Uma biblioteca compartilhada sempre quebra a compatibilidade com versões anteriores (achei que não)?

Minhas opções conforme as percebo são:

a. Fazendo o download e compilando libgmp.so.3 para x64

b. Recompilando o software

c. Riscos em execução: Eu seria capaz de escrever um link para usar libgmp.so.10 (como libgmp.so.3 )?

Eles funcionariam? Quais seriam os prós / contras?

PS:

extra: ldd para o bin

linux-vdso.so.1 =>  (0x00007fff290fa000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f8061064000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8060e46000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8060b3f000)
libbz2.so.1 => /lib/x86_64-linux-gnu/libbz2.so.1 (0x00007f806092f000)
llibz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8060716000)
libgmp.so.3 => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8060350000)
/lib64/ld-linux-x86-64.so.2 (0x00007f80612a0000)
    
por cladelpino 07.10.2015 / 20:02

1 resposta

0

Da saída do ldd, não parece que /usr/lib/x86_64-linux-gnu/ esteja no caminho que ld sabe procurar por bibliotecas compartilhadas. Você pode verificar isso executando ldconfig -v com privilégios de superusuário, que irá mostrar uma lista de todas as bibliotecas compartilhadas que o LD pode encontrar. Se você não encontrar a libgmp nessa lista, precisará editar o /etc/ld.so.conf.d/[your-system-arch].conf para colocar /usr/lib/x86_64-linux-gnu/ no caminho de pesquisa da biblioteca.

    
por 31.07.2016 / 06:24