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)