Вопрос Как запустить 32-битное приложение в 64-битном Ubuntu?


Я установил Ubuntu 14.04 и текущий SDK для разработки Android, который содержит 32-разрядные исполняемые файлы. Я обнаружил, что не могу запустить эти 32-битные двоичные файлы. Попытка запустить их из bash дает мне ошибку:

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

Он есть, хотя:

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

В прежние времена можно было просто установить 32-битные библиотеки на 64-разрядном Ubuntu для получения 32-разрядной поддержки, но это, похоже, больше не работает.

Как запустить 32-разрядные приложения на 64-разрядном Ubuntu 14.04?


106
2018-04-24 07:29


происхождения


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


ответы:


Чтобы запустить 32-разрядный исполняемый файл в 64-битной многоадресной системе Ubuntu, вам необходимо добавить i386 архитектуры и установить три библиотечных пакета libc6:i386, libncurses5:i386, а также libstdc++6:i386:

sudo dpkg --add-architecture i386

Или, если вы используете Ubuntu 12.04 LTS (Precise Pangolin) или ниже, используйте это:

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

Затем:

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

Если это не удается,

sudo apt-get install multiarch-support

После этих шагов вы сможете запустить 32-битное приложение:

./example32bitprogram

160
2018-04-24 07:31



@AvinashRaj Это помогло мне! Однако, какова последняя команда «sudo ./adb», которая должна была делать на самом деле? - Marcel
Он выполняет 32-битный двоичный файл adb, который присутствовал в текущем каталоге. - Avinash Raj
чтобы получить работу над Ubuntu 14.04, мне пришлось установить lib32z1 также, но заметил, что он потянул в libc6-i386 (различие, обратите внимание на дефис, а не на двоеточие). - Chris Betti
Я сделал твои шаги, libc6:i386, libncurses5:i386, libstdc++6:i386 являются новейшей версией и устанавливаются вручную. Но после этого он говорит: "Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..."и неудовлетворительные зависимости: libstdc++6-4.4-dev:i386 зависит g++-4.4:i386(не будет установлен). конфликты: libstdc++6-4.4-dbg:i386 ... и другие конфликты libstdc++6-4.4/6/7 и т. д. Что не так, или я должен оставить его таким, каким он есть сейчас? - Fredrick Gauss
@FredrickGauss попасть в Вот, - Avinash Raj


«Нет такого файла или каталога» может появиться, когда у вас есть свой двоичный файл, но ему не хватает некоторых библиотек. Если вы установите build-essential пакета, у вас будет ldd команда доступна. Эта команда ldd ./adb | grep not покажет вам, какие библиотеки отсутствуют. Просто установите эти библиотеки в i386 arch с помощью apt. Как это: apt-get install libmissing:i386 Опасайтесь, некоторые багги-пакеты попытаются удалить 64-битную версию firs.


6
2018-04-24 08:44



Спасибо, это объяснило бы странное сообщение об ошибке. Я был сначала смущен, почему bash дал бы мне эту ошибку (вместо того, чтобы некоторая ошибка стала более ясной из дочернего процесса, который пропускает библиотеки), но теперь я думаю, что bash просто видит exec (3), возвращая ENOENT и печатает это. - Thomas Stuefe


И если вы хотите использовать «adb», для него есть пакет:

sudo apt-get install android-tools-adb

А около 32-битных библиотек - только:

sudo apt-add-architecture i386

будет достаточно.


4
2018-04-24 12:29



Спасибо за подсказку, но я хотел использовать инструменты Android, загруженные из Google, а не в репозитории Ubuntu. Я также не уверен в полноте этого пакета. - Thomas Stuefe
Репозитории Ubuntu должны иметь новую версию. Пакет содержит только adb. Если вы хотите fastboot - есть пакет для него тоже :) - aastefanov


В дополнение к отличному ответу Zanna и Avinash Raj мне также пришлось установить gcc-multilib:

sudo apt-get install gcc-multilib

Возможно, это потому, что я хотел запустить старую версию gcc на 64-битной версии.


2
2017-09-04 13:52