& ldquo; не может выполнить двоичный файл: ошибка формата Exec & rdquo; 32-разрядный .run-файл в 64-битной системе [dубликат]

Я установил 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
задан 28 April 2017 в 09:03

8 ответов

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

sudo dpkg --add-architecture i386

Или, если вы используете Ubuntu & nbsp; 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
158
ответ дан 18 July 2018 в 07:48

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

sudo dpkg --add-architecture i386

Или, если вы используете Ubuntu & nbsp; 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
158
ответ дан 24 July 2018 в 18:53

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

sudo apt-get install android-tools-adb

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

sudo apt-add-architecture i386

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

4
ответ дан 18 July 2018 в 07:48

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

6
ответ дан 18 July 2018 в 07:48

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

sudo apt-get install gcc-multilib

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

1
ответ дан 18 July 2018 в 07:48

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

sudo apt-get install android-tools-adb

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

sudo apt-add-architecture i386

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

4
ответ дан 24 July 2018 в 18:53
  • 1
    Спасибо за подсказку, но я хотел использовать инструменты Android, загруженные из Google, а не в репозитории Ubuntu. Я также не уверен в полноте этого пакета. – Thomas Stuefe 24 April 2014 в 17:36
  • 2
    Репозитории Ubuntu должны иметь новую версию. Пакет содержит только adb. Если вы хотите fastboot - есть пакет для него тоже :) – aastefanov 24 April 2014 в 17:44

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

6
ответ дан 24 July 2018 в 18:53
  • 1
    Спасибо, это объяснило бы странное сообщение об ошибке. Я был сначала смущен, почему bash дал бы мне эту ошибку (вместо того, чтобы некоторая ошибка стала более ясной из дочернего процесса, который пропускает библиотеки), но теперь я думаю, что bash просто видит exec (3), возвращая ENOENT и печатает это. – Thomas Stuefe 24 April 2014 в 17:30

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

sudo apt-get install gcc-multilib

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

1
ответ дан 24 July 2018 в 18:53

Другие вопросы по тегам:

Похожие вопросы: