ldd com binários de 32 bits no sistema de 64 bits - executa, mas não reporta

3

Meus linkers estão em

/lib{32,64}/ld-2.20.so , com links simbólicos em

/lib32/ld-linux.so.2 e

/lib64/ld-linux-x86-64.so.2 (para o ld-2.20.so s apropriado)

Quando eu tento executar um binário de 32 bits, tudo está bem. Eles compilam bem (estou usando um arquivo gcc specs ligeiramente modificado) e aparentemente ligam bem e executam bem.

Quando eu tento ldd /path/to/example/32bit/binary , sou informado de not a dynamic executable . Meu entendimento é que isso é devido a ser incapaz de encontrar um vinculador para abrir o executável.

readelf -l example_binary | grep interpreter fornece [Requesting program interpreter: /lib32/ld-linux.so.2] , conforme esperado.

Alguma idéia de por que isso está acontecendo / como posso corrigi-lo?

p. - "Instalar bibliotecas de compatibilidade de 32 bits usando sudo apt get ..." não é útil, já que não tem apt / pacman / etcetera. Se eu precisar reinstalar uma biblioteca específica (32 bits), saiba que seria útil!

P.p.s - Os arquivos de script instalados por gcc at /usr/lib{32,64}/libc.so agrupam os arquivos% (co_de%) e libc.so.6 apropriados (reais), com libc_nonshared.a na extremidade final para lib32

    
por chrisb2244 01.05.2015 / 04:09

1 resposta

2

Acontece que isso é muito fácil.

/usr/bin/ldd é apenas um arquivo de script.

Abrir o arquivo de script mostra uma linha perto do topo, que inicialmente lê (no meu sistema):

RTLDLIST="/lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2 /libx32/ld-linux-x32.so.2" .

Alterando esta linha para RTLDLIST="/lib32/ld-linux.so.2 /lib64/..." corrigiu imediatamente o problema.

p. (adicionando aqui caso isso ajude alguém que está com dificuldades de instalar o gobject-introspection) A solução também é útil se você tentar instalar o gobject-introspection, porque isso chama ldd para resolver bibliotecas.

A mensagem de erro que recebi foi: ERROR: can't resolve libraries to shared libraries: gobject-2.0, glib-2.0

    
por 01.05.2015 / 07:16