Comment faire pour exécuter des programmes 32 bits sur 64 bits Fedora 17?

Bien que l'set d'outils de développement Android (ADT) soit disponible en tant que packageage zip pour «Linux 64 Bit», il indique les conditions suivantes :

Les dissortingbutions 64 bits doivent être capables d'exécuter des applications 32 bits.

En effet, l'exécution de l'éclipse packagée sur un système Fedora 17 64 bits entraîne des erreurs car elle ne peut pas «find» plusieurs outils de développement, par exemple adb ou aapt :

Erreur lors de l'exécution de aapt: Impossible d'exécuter le programme "/home/juser/local/adt- bundle-linux / sdk / platform-tools / aapt": error = 2, Aucun file ou directory: error = 2

Le 'non tel file' est trompeur car il est là (sous $ HOME / local):

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

Mais je ne peux pas l'exécuter sur le shell:

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

Regarder le file

 $ 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 ssortingpped 

on voit que c'est un 32 binary. Et il semble que mon système (actuellement) ne soit pas capable d'exécuter des applications 32 bits.

Comment puis-je changer ça? Comment créer un système Fedora 64 bits courant capable d'exécuter des applications 32 bits?

(Bien sûr, on pourrait aussi requestr pourquoi quelqu'un finit par mettre des binarys 32 bits dans un package binary appelé «Linux 64 bits» …)

    En ce qui concerne Eclipse ne peut pas find adb , etc, parce que sans les bibliothèques partagées 32 bits nécessaires pour les exécuter sur le système, ils ne sont pas exécutables.

    En ce qui concerne les bibliothèques 32 bits, la situation est assez simple: il suffit d'installer les bibliothèques 32 bits appropriées. Sur l'installation Fedora 17 bits j'ai ici, les bibliothèques primaires de 64 bits sont dans / usr / lib64 et les bibliothèques facultatives de 32 bits sont dans / usr / lib. Donc, si j'appelle ldd sur 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) 

    Notez que tout cela est dans / lib, qui est un lien symbolique vers / usr / lib (pas / usr / lib64). Regardez:

     »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 [...] 

    Une bibliothèque C standard 32 bits. Ce que vous pouvez faire est de passer par les outils sdk 32 bits et vérifier pour voir ce qu'ils sont liés avec ldd . Je n'ai pas un exemple à scope de main, mais si quelque chose manque ldd rapporte quelque chose comme:

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

    Tout d'abord , pour que ldd fonctionne, vous aurez besoin du chargeur 32 bits fourni avec la glibc 32 bits (sans cela, ldd l'appellera un file non exécutable et ne vous dira rien):

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

    C'est tronqué, mais le package x86_64 est ce que vous avez déjà; le i686 est la version 32 bits. Donc, installez-le.

    Vous n'avez besoin d'aucun package 'devel', car rien n'est compilé. Au-delà de cela, les devinettes éduquées et yum whatprovides / yum search devraient aider (en regardant la list pour adb, il y a aussi des versions 32 bits de la bibliothèque C ++, ncurses, pthreads et quelques choses que je ne connais pas).

    whatprovides sur l'utilisation de whatprovides :

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

    😉

    Vous devez installer la glibc 32 bits:

     # yum install glibc.i686 

    Cela supprime le message trompeur 'no tel file ou directory' en essayant d'exécuter un binary 32 bits. Avec cela, le système Fedora 64 bits est capable d'exécuter des binarys 32 bits.

    Cela supprime également le message trompeur «pas un exécutable dynamic» de ldd lors de l'appel de ldd sur un exécutable dynamic 32 bits.

    Maintenant, vous devez installer les bibliothèques 32 bits manquantes. Les files binarys sous adt-bundle-linux/sdk/platform-tools sont liés à:

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

    C'est tout.

    Context

    Quelques informations sur la façon de dériver les noms de packages ci-dessus. Par exemple en regardant la sortie 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) [..] 

    signifie que 2 bibliothèques sont toujours manquantes pour adb.

    Pour chaque 'non trouvé', nous devons searchr le nom du package, par exemple:

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

    Maintenant nous prenons le nom de base du package et y ajoutons '.i686' pour get la version 32 bits.

    Vous pouvez installer le package nécessaire avec:

     sudo yum install redhat-lsb.i686