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

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

$ ./adbbash: ./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. 

Тот же симптом для всех других 32-разрядных инструментов в Android SDK.

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

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

Чтобы запустить 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 updatesudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

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

sudo apt-get install multiarch-support

После выполнения этих действий вы сможете запустить 32-разрядное приложение:

./example32bitprogram

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

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

sudo apt-get install gcc-multilib

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

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

sudo apt-get install android-tools-adb

И о 32-разрядных библиотеках - только:

sudo apt-add-architecture i386

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

Просто дополнение к Занне:
Следующее решило проблему Android studio с "невозможностью установки библиотек".:

sudo apt-get install libdb1-compact tzdata initscripts

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

Уместно: compiling - How to compile 32-bit executable on 64 bit system - Ask Ubuntu

Уместно: 64bit - How can I build and run 32-bit software on 64-bit Debian? - Unix & Linux Stack Exchange

Уместно: 64 bit - GCC - Compile 32-bit code on 64-bit system - Ask Ubuntu