Vraag Hoe een 32-bit app in Ubuntu 64-bit uit te voeren?


Ik heb Ubuntu 14.04 en de huidige SDK voor Android-ontwikkeling geïnstalleerd, die 32-bits uitvoerbare bestanden bevat. Ik ontdekte dat ik die 32-bits binaries niet kan uitvoeren. Als ik probeer ze vanaf bash te starten, krijg ik een foutmelding:

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

Het is er echter:

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

Vroeger kon men gewoon 32-bit bibliotheken installeren op 64-bit Ubuntu om 32-bit ondersteuning te krijgen, maar dat lijkt niet meer te werken.

Hoe voer ik 32-bits apps uit op een 64-bits Ubuntu 14.04?


106
2018-04-24 07:29


oorsprong


stackoverflow.com/a/19524010/1778421 - Alex P.


antwoorden:


Als u een 32-bits uitvoerbaar bestand wilt uitvoeren op een 64-bits multi-architectuur Ubuntu-systeem, moet u het i386 architectuur en installeer de drie bibliotheekpakketten libc6:i386, libncurses5:i386, en libstdc++6:i386:

sudo dpkg --add-architecture i386

Of gebruik je dit als je Ubuntu 12.04 LTS (Precise Pangolin) of lager gebruikt:

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

Dan:

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

Als het niet lukt, doe het dan ook

sudo apt-get install multiarch-support

Na deze stappen moet u de 32-bits toepassing kunnen uitvoeren:

./example32bitprogram

160
2018-04-24 07:31



@AvinashRaj Dit heeft me geholpen! Echter, wat is het laatste commando dat "sudo ./adb" eigenlijk zou moeten doen? - Marcel
Het voert het 32 ​​bits adb binaire bestand uit dat aanwezig was in de huidige map. - Avinash Raj
om aapt te laten werken op Ubuntu 14.04, moest ik installeren lib32z1 ook, maar merkte op dat het in libc6-i386 werd getrokken (onderscheid, let op het koppelteken, niet op de dubbele punt). - Chris Betti
Ik deed je stappen, libc6:i386, libncurses5:i386, libstdc++6:i386 zijn de nieuwste versie en zijn ingesteld op handmatig geïnstalleerd. Maar daarna zegt het: "Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..."en onbetaalde afhankelijkheden: libstdc++6-4.4-dev:i386 hangt er van af g++-4.4:i386(zal niet worden geïnstalleerd). conflicten: libstdc++6-4.4-dbg:i386 ... en andere conflicten over libstdc++6-4.4/6/7 etc. Wat is er mis of moet ik het laten zoals het nu is? - Fredrick Gauss
@FredrickGauss begint hier. - Avinash Raj


"Geen bestand of map" kan worden weergegeven wanneer u uw binaire bestand hebt, maar het ontbreekt aan een aantal bibliotheken. Als je installeert build-essential pakket, zal je hebben ldd commando beschikbaar. Dit commando ldd ./adb | grep not zal laten zien welke bibliotheken ontbreken. Installeer deze bibliotheken eenvoudig in i386-boog met apt. Soortgelijk: apt-get install libmissing:i386 Pas op, sommige pakketten met fouten zullen proberen 64-bits versie-firs te verwijderen.


6
2018-04-24 08:44



Bedankt, dat zou de rare foutmelding verklaren. Ik was voor de eerste keer in de war waarom bash me deze fout zou geven (in plaats van dat een fout duidelijker naar voren komt uit het kindproces dat de bibliotheken mist), maar nu denk ik dat bash exec (3) ENOENT terugkeert en dit uitprint. - Thomas Stuefe


En als u "adb" wilt gebruiken, is er een pakket voor:

sudo apt-get install android-tools-adb

En over 32-bit bibliotheken - alleen:

sudo apt-add-architecture i386

zal genoeg zijn.


4
2018-04-24 12:29



Bedankt voor de tip, maar ik wilde de Android-hulpmiddelen gebruiken die zijn gedownload van Google, niet die in de Ubuntu-repos. Ik ben ook niet zeker van de volledigheid van dat pakket. - Thomas Stuefe
Ubuntu-bibliotheken moeten de nieuwe versie hebben. Het pakket bevat alleen adb. Als je fastboot wilt - is er ook een pakket voor :) - aastefanov


Naast het uitstekende antwoord van Zanna en Avinash Raj moest ik ook gcc-multilib installeren:

sudo apt-get install gcc-multilib

Mogelijk is dit omdat ik een oude gcc-versie wilde uitvoeren op 64bit.


2
2017-09-04 13:52