Как запустить 32-битное приложение в Ubuntu 64-бит?
Я установил 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?
4 ответа
Чтобы запустить 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
"Нет такого файла или каталога" может появиться, когда у вас есть бинарный файл, но в нем отсутствуют некоторые библиотеки. Если вы установите build-essential
пакет, у вас будет ldd
команда доступна. Эта команда ldd ./adb | grep not
покажет вам, какие библиотеки отсутствуют. Просто установите эти библиотеки в i386 arch с apt. Как это: apt-get install libmissing:i386
Осторожно, некоторые ошибочные пакеты будут пытаться удалить первые 64-битные версии.
В дополнение к превосходному ответу Занны и Авинаша Раджя, мне также пришлось установить gcc-multilib:
sudo apt-get install gcc-multilib
Возможно, это потому, что я хотел запустить старую версию gcc на 64-битной версии.
И если вы хотите использовать "adb", для этого есть пакет:
sudo apt-get install android-tools-adb
И про 32-битные библиотеки - только:
sudo apt-add-architecture i386
будет достаточно.
Просто дополнение к Zanna:
следующее решило проблему студии Android "невозможно установить библиотеки":
sudo apt-get install libdb1-compact tzdata initscripts
Это заменяет отсутствующую библиотеку libstdC++6-i386, что, вероятно, связано с тем, что пакет устарел. Не уверен, почему эта конкретная библиотека была важна.