É principalmente depende do software e como foi escrito. Nesses casos, eu usaria o binário de 32 bits do Debian (se disponível) ou o binário compilado de 32 bits. Isso já foi explicado na minha resposta Como você executa um programa de 32 bits em uma versão de 64 bits do Ubuntu? e demonstrado mesmo rodando uma versão de 64 bits de um sistema de 32 bits (o que era impossível alguns anos atrás). É realmente mais fácil executar aplicativos de 32 bits em sistemas de 64 bits.
Normalmente, quando você executa o binário, ele informará sobre bibliotecas ausentes, que você pode procurar nos repositórios.
13.10 captura qualquer chamada para bibliotecas ia32libs e traduz as chamadas para o código correto em amd64?
Não. Os desenvolvedores devem fazer isso. O sistema mostra apenas as bibliotecas usando o GNU Linker ld
. Se o software tentar usar bibliotecas "hard-code", você terá que enganá-lo e apontá-lo para as bibliotecas certas. Software moderno e bem escrito, não precisa disso.
Se ele for executado, isso significa que todas as bibliotecas necessárias foram carregadas corretamente ou haverá uma alteração mais tarde, quando uma biblioteca necessária estiver ausente, afinal?
Se for executado, é perfeito. Através de bibliotecas são carregadas no início do executável, e sem elas (ou seja, algumas delas estão faltando) ele não será iniciado, mas mesmo se elas estiverem presentes, nem todas as chamadas são chamadas no início, então talvez uma determinada chamada para uma determinada função mudou a maneira como se comporta e o aplicativo não suporta isso, levando a uma falha. Estes são cenários de casos de canto, mas eles são possíveis Então você provavelmente notará se tiver incompatibilidades com bibliotecas mais novas. No entanto, essa é outra questão. Para corrigir isso, você terá que se adaptar às novas bibliotecas ou fazer o downgrade do já instalado.
É necessário fazer uma solução alternativa, como instalar o gcc?
gcc
é um compilador. Somente se você compilar o código usando C ou C ++, será necessário instalá-lo. Outros casos podem precisar de uma solução alternativa, mas eu não vi um "binário" (executável já compilado) precisando do compilador gcc
para ser executado.
Como descubro de quais bibliotecas eu preciso para executar este software? (ou qualquer outro software de 32 bits que não seja oferecido através de um gerenciador de pacotes)
É um pouco brutal, mas se as instruções não dizem exatamente quais bibliotecas você precisa, ou usam o comando ld-linux.so --list
. Exemplo:
$ /lib64/ld-linux-x86-64.so.2 --list /bin/bash
linux-vdso.so.1 => (0x00007fffd479f000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f0d39138000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0d38f34000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d38b6a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0d3937f000
(o binário ldd
fornece a mesma saída, graças a @ubfan)
Como você pode ver, bash
usa o linux-vdso, libtinfo.so, libdl.so e libc.so. Se essas bibliotecas estiverem corretas, bash
ficará feliz com elas. Isso é para dinamicamente vinculados a binários . Você pode usar --verify
para verificar se o binário está realmente vinculado dinamicamente.
Então você pega o nome das bibliotecas, digamos libtinfo.so.5 , que incluiu nos pacotes:
File Packages
/lib/i386-linux-gnu/libtinfo.so.5 libtinfo5 [not amd64]
/lib/x86_64-linux-gnu/libtinfo.so.5 libtinfo5 [not i386]
/lib32/libtinfo.so.5 lib32tinfo5 [not i386]
/lib64/libtinfo.so.5 lib64tinfo5 [not amd64]
/usr/lib/debug/libtinfo.so.5 libtinfo5-dbg
/usr/libx32/libtinfo.so.5 libx32tinfo5
Portanto, basta instalar o pacote correto para a arquitetura do binário (se for de 32 bits, adicionar :i386
ao nome do pacote, 64 bits :amd64
) e seremos bons vai.
Agulhas para dizer, para executar binários de 64 bits em uma plataforma de 32 bits, sua CPU deve ter capacidade de 64 bits (a maioria dos sistemas de 2008 e posteriores) e provavelmente precisará de um kernel de 64 bits instalado.