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


132

Я установил 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?


Ответы:


186

Для того, чтобы запустить 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

@AvinashRaj Это помогло мне! Однако, что на самом деле должна делать последняя команда "sudo ./adb"?
Марсель

1
Он выполняет 32-битный двоичный файл ADB, который присутствовал в текущем каталоге.
Авинаш Радж

1
чтобы Aapt работал на Ubuntu 14.04, мне также пришлось установить его lib32z1, но он заметил, что он загружен в libc6-i386 (различие, обратите внимание на дефис, а не на двоеточие).
Крис Бетти

Я сделал свои шаги, 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и т. д. Что не так или я должен оставить все как есть?
Фредрик Гаусс

@FredrickGauss попасть сюда .
Авинаш Радж

9

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


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

5

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

sudo apt-get install android-tools-adb

И про 32-битные библиотеки - только:

sudo apt-add-architecture i386

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


Спасибо за совет, но я хотел использовать инструменты Android, загруженные с Google, а не те, что в репозиториях Ubuntu. Я также не уверен в полноте этого пакета.
Томас Stuefe

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

3

В дополнение к превосходному ответу Занны и Авинаша Раджя, мне также пришлось установить gcc-multilib:

sudo apt-get install gcc-multilib

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


0

Просто дополнение к Zanna: Следующее решило проблему андроид-студии «невозможно установить библиотеки»:

$ sudo apt-get install libdb1-compact tzdata initscripts

Это заменяет отсутствующую библиотеку libstdc ++ 6-i386, что, вероятно, связано с устареванием пакета. Не уверен, почему эта конкретная библиотека была важна.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.