Como executar programas de 32 bits no Fedora 17 de 64 bits?

9

Embora o pacote do Android Development Tools (ADT) esteja disponível como um pacote zip para 'Linux 64 Bit' afirma seguintes requisitos :

64-bit distributions must be capable of running 32-bit applications.

E, de fato, apenas executar o eclipse empacotado em um sistema Fedora 17 de 64 bits resulta em erros, porque ele não pode 'encontrar' várias ferramentas de desenvolvimento, por exemplo, adb ou aapt :

Error executing aapt: Cannot run program "/home/juser/local/adt-bundle-linux/sdk/platform-tools/aapt": error=2, No such file or directory: error=2, No such file or directory

O "nenhum tal arquivo" é enganador porque está lá (sob $ HOME / local):

adt-bundle-linux/sdk/platform-tools/aapt

Mas não consigo executá-lo no shell:

~/local $ ./adt-bundle-linux/sdk/platform-tools/aapt 
zsh: no such file or directory: ./adt-bundle-linux/sdk/platform-tools/aapt

Olhando para o arquivo

$ file adt-bundle-linux/sdk/platform-tools/aapt
adt-bundle-linux/sdk/platform-tools/aapt: ELF 32-bit LSB executable, Intel 80386,
 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8,
 not stripped

vemos que é um binário 32. E parece que meu sistema (atualmente) não é capaz de executar aplicativos de 32 bits.

Como eu mudo isso? Como faço para um sistema atual de 64 bits do Fedora capaz de executar aplicativos de 32 bits?

(É claro que alguém pode perguntar por que alguém acaba colocando binários de 32 bits em um pacote binário chamado 'Linux 64 bit' ...)

    
por maxschlepzig 07.12.2012 / 11:43

3 respostas

8

Em relação ao eclipse não conseguir localizar adb , etc, isso porque, sem as bibliotecas compartilhadas de 32 bits necessárias para executá-las no sistema, elas não são executáveis.

Com relação às bibliotecas de 32 bits, a situação é bem simples: você só precisa instalar as bibliotecas apropriadas de 32 bits. Na instalação do fedora 17 de 64 bits que tenho aqui, as bibliotecas primárias de 64 bits estão em / usr / lib64 e as bibliotecas opcionais de 32 bits estão em / usr / lib. Então, se eu chamar ldd on em sdk / platform-tools / adb:

linux-gate.so.1 =>  (0xf7791000)
librt.so.1 => /lib/librt.so.1 (0xf776c000)
libncurses.so.5 => /lib/libncurses.so.5 (0xf7747000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf772d000)
libstdc++.so.6 => /lib/libstdc++.so.6 (0xf7644000)
libm.so.6 => /lib/libm.so.6 (0xf7618000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf75fb000)
libc.so.6 => /lib/libc.so.6 (0xf7449000)
/lib/ld-linux.so.2 (0xf7792000)
libdl.so.2 => /lib/libdl.so.2 (0xf7444000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0xf7424000)

Note que estes são todos em / lib, que é um link simbólico para / usr / lib (não / usr / lib64). Olhe:

»file /lib/libc.so.6
/lib/libc.so.6: symbolic link to 'libc-2.15.so'
»file /lib/libc-2.15.so
/lib/libc-2.15.so: ELF 32-bit LSB shared object [...]

Uma biblioteca C padrão de 32 bits. O que você pode fazer é percorrer as ferramentas sdk de 32 bits e verificar com o que elas estão vinculadas com ldd . Eu não tenho um exemplo em mãos, mas se algo está faltando, ldd relata algo como:

libc.so.6 => ??????

Primeiro , tho, para o ldd funcionar, você precisará do carregador de 32 bits que vem com o glibc de 32 bits (sem isso, o ldd o chamará de um arquivo não-executável e informará nada):

»yum search glibc
glibc.i686 : The GNU libc libraries
glibc.x86_64 : The GNU libc libraries

Isso é truncado, mas o pacote x86_64 é o que você já tem; o i686 é a versão de 32 bits. Então, basta instalar isso.

Você não precisa de nenhum dos pacotes 'devel', já que nada é compilado. Além disso, adivinhações educadas e yum whatprovides / yum search devem ajudar (olhando para a lista de adb, há também versões de 32 bits do lib C ++, ncurses, pthreads e algumas coisas que eu não sei).

Dica rápida sobre o uso de whatprovides :

»yum whatprovides libtinfo
No matches found.
»yum whatprovides libtinfo.so.5
[2 matches]
»yum whatprovides "*/libtinfo.so.5"
[4 matches]

;)

    
por 07.12.2012 / 12:49
7

Você precisa instalar o glibc de 32 bits:

# yum install glibc.i686

Isso remove a mensagem enganosa de 'nenhum arquivo ou diretório' ao tentar executar um binário de 32 bits. Com isso, o sistema Fedora de 64 bits é capaz de executar binários de 32 bits.

Isso também remove a mensagem enganosa 'não executável dinâmico' de ldd ao chamar ldd em um executável dinâmico de 32 bits.

Agora você precisa instalar bibliotecas ausentes de 32 bits em que os binários sob adt-bundle-linux/sdk/platform-tools estão vinculados:

# yum install zlib.i686 libstdc++.i686 ncurses-libs.i686 libgcc.i686

É isso.

Antecedentes

Alguns antecedentes sobre como obter os nomes dos pacotes acima. Por exemplo, olhando para a saída de

$ ldd adb
linux-gate.so.1 =>  (0xf774f000)
librt.so.1 => /lib/librt.so.1 (0xf7725000)
libncurses.so.5 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0xf770b000)
libstdc++.so.6 => not found
libm.so.6 => /lib/libm.so.6 (0xf76df000)
    [..]

significa que 2 bibliotecas ainda estão faltando para adb.

Para cada "não encontrado", temos que pesquisar o nome do pacote, por exemplo:

$ yum whatprovides '*libstdc++.so.6'
[..]
libstdc++-4.7.2-2.fc17.i686 : GNU Standard C++ Library
[..]

Agora pegamos o nome base do pacote e adicionamos '.i686' para obter a versão de 32 bits.

    
por 07.12.2012 / 18:21
2

Você pode instalar o pacote necessário com:

sudo yum install redhat-lsb.i686
    
por 14.04.2013 / 06:43