ldd com binários de 32 bits no sistema de 64 bits - roda, 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 os devidos ld-2.20.sos)

Quando eu tento executar um binário de 32 bits, tudo está bem. Eles compilar bem (eu estou usando um specsarquivo gcc ligeiramente modificado ) e, aparentemente, link bem e correr bem.

Quando eu tento ldd /path/to/example/32bit/binary, me disseram 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[Requesting program interpreter: /lib32/ld-linux.so.2], como esperado.

Alguma idéia de por que isso está acontecendo / como posso consertar isso?

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

PPS - Os arquivos de script instalados por gccpelo /usr/lib{32,64}/libc.sogrupo apropriado (real) libc.so.6e libc_nonshared.aarquivos, com a AS_NEEDED ( /lib32/ld-linux.so.2 ) )no final da cauda para lib32

chrisb2244
fonte

Respostas:

2

Acontece que isso é bem 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/..."corrigir imediatamente o problema.

Ps (adicionando aqui, no caso de ajudar alguém a se esforçar para instalar o gobject-introspection) A solução também é útil se você tentar instalar o gobject-introspection, porque isso requer ldda resolução de bibliotecas.

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

chrisb2244
fonte