Comment exécuter une application 32 bits dans Ubuntu 64 bits?

132

J'ai installé Ubuntu 14.04 et le SDK de développement Android actuel, qui contient des exécutables 32 bits. J'ai constaté que je ne pouvais pas exécuter ces fichiers binaires 32 bits. Essayer de les démarrer à partir de bash me donne une erreur:

$ ./adb
bash: ./adb: No such file or directory

C'est là cependant:

$ ls -al ./adb
-rwxrwxrwx 1 thomas thomas 1231255 Jan 17 13:31 ./adb
$ file ./adb
./adb: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped. Same symptom for all the other 32-bit tools in the Android SDK. 

Autrefois, on pouvait simplement installer des bibliothèques 32 bits sur Ubuntu 64 bits pour obtenir un support 32 bits, mais cela ne semble plus fonctionner.

Comment exécuter des applications 32 bits sur un Ubuntu 14.04 64 bits?

Thomas Stuefe
la source

Réponses:

186

Pour exécuter un fichier exécutable 32 bits sur un système multi-architecture de Ubuntu 64 bits, vous devez ajouter l' i386architecture et installer les trois paquets de bibliothèque libc6:i386, libncurses5:i386et libstdc++6:i386:

sudo dpkg --add-architecture i386

Ou si vous utilisez Ubuntu 12.04 LTS (Precise Pangolin) ou une version antérieure, utilisez ceci:

echo "foreign-architecture i386" > /etc/dpkg/dpkg.cfg.d/multiarch

Ensuite:

sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

Si échoue, faites aussi

sudo apt-get install multiarch-support

Après ces étapes, vous devriez pouvoir exécuter l'application 32 bits:

./example32bitprogram
Avinash Raj
la source
@AvinashRaj Cela m'a aidé! Cependant, quelle est la dernière commande "sudo ./adb" censée faire réellement?
Marcel
1
Il exécute le fichier binaire adb 32 bits présent dans le répertoire en cours.
Avinash Raj
1
pour que Aapt fonctionne sur Ubuntu 14.04, je devais également installer lib32z1, mais j'ai remarqué qu'il tirait dans libc6-i386 (distinction, remarquez le trait d'union, pas le colon).
Chris Betti
Je l' ai fait vos pas, libc6:i386, libncurses5:i386, libstdc++6:i386sont nouvelle version et mettre manuellement installé. Mais après cela il dit: " Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..." et dépendances non satisfaites: libstdc++6-4.4-dev:i386dépend g++-4.4:i386(ne sera pas installé). conflits: libstdc++6-4.4-dbg:i386... et d'autres conflits à propos de libstdc++6-4.4/6/7etc. Qu'est-ce qui ne va pas ou dois-je le laisser tel quel?
Fredrick Gauss
@FredrickGauss entrer ici .
Avinash Raj
9

"Aucun fichier ou répertoire de ce type" peut apparaître lorsque vous avez votre binaire, mais il manque certaines bibliothèques. Si vous installez le build-essentialpaquet, vous aurez la lddcommande disponible. Cette commande ldd ./adb | grep notvous montrera quelles bibliothèques sont manquantes. Installez simplement ces bibliothèques dans i386 arch avec apt. Comme ceci: apt-get install libmissing:i386 Attention, certains paquets bogués essaieront de supprimer les sapins de version 64 bits.

Barafu Albino
la source
Merci, cela expliquerait le message d'erreur étrange. J'ai d'abord compris pourquoi bash m'avait donné cette erreur (au lieu d'une erreur venant plus clairement du processus enfant qui manque les bibliothèques), mais maintenant je suppose que bash voit simplement exec (3) renvoyer ENOENT et l'afficher.
Thomas Stuefe
5

Et si vous voulez utiliser "adb", il existe un paquet pour cela:

sudo apt-get install android-tools-adb

Et à propos des bibliothèques 32 bits - seulement:

sudo apt-add-architecture i386

sera suffisant.

aastefanov
la source
Merci pour le conseil, mais je voulais utiliser les outils Android téléchargés sur Google, pas ceux du dépôt Ubuntu. Je ne suis pas sûr non plus de l'exhaustivité de ce paquet.
Thomas Stuefe
Les dépôts Ubuntu doivent avoir la nouvelle version. Le paquet contient seulement adb. Si vous voulez fastboot - il y a un paquet pour ça aussi :)
aastefanov
3

En plus de l'excellente réponse de Zanna et Avinash Raj, j'ai également dû installer gcc-multilib:

sudo apt-get install gcc-multilib

C'est peut-être parce que je voulais exécuter une ancienne version de gcc sur 64 bits.

utilisateur2144067
la source
0

Juste un ajout à Zanna: Ce qui suit a résolu le problème du studio android "impossible d'installer des bibliothèques":

$ sudo apt-get install initscripts tzdata libdb1-compact

Ceci remplace la bibliothèque manquante libstdc ++ 6-i386, probablement parce que le paquet a été obsolète. Je ne sais pas pourquoi cette bibliothèque spécifique était importante.

Zohar Segal
la source