Хотя пакет «Инструменты разработки Android» (ADT) доступен в виде zip-пакета для «Linux 64 Bit», он содержит следующие требования :
64-разрядные дистрибутивы должны поддерживать 32-разрядные приложения.
И действительно, простое выполнение упакованного затмения в 64-битной системе Fedora 17 приводит к ошибкам, потому что он не может «найти» несколько инструментов разработки, например adb
или aapt
:
Ошибка при выполнении aapt: Невозможно запустить программу "/ home / juser / local / adt-bundle-linux / sdk / platform-tools / aapt": error = 2, Нет такого файла или каталога: error = 2, Нет такого файла или каталога
«Нет такого файла» вводит в заблуждение, потому что он там (в $ HOME / local):
adt-bundle-linux/sdk/platform-tools/aapt
Но я не могу выполнить это на оболочке:
~/local $ ./adt-bundle-linux/sdk/platform-tools/aapt
zsh: no such file or directory: ./adt-bundle-linux/sdk/platform-tools/aapt
Глядя на файл
$ file adt-bundle-linux/sdk/platform-tools/aapt
adt-bundle-linux/sdk/platform-tools/aapt: ELF 32-bit LSB executable, Intel 80386,
version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8,
not stripped
мы видим, что это 32 бинарных. И похоже, что моя система (в настоящее время) не способна запускать 32-битные приложения.
Как мне это изменить? Как сделать текущую 64-битную систему Fedora способной запускать 32-битные приложения?
(Конечно, можно также спросить, почему кто-то заканчивает тем, что кладет 32-битные двоичные файлы в двоичный пакет, называемый «Linux 64 bit» ...)
Ответы:
Что касается невозможности найти затмение и
adb
т. Д., То это потому, что без 32-битных разделяемых библиотек, необходимых для их запуска в системе, они не являются исполняемыми.Что касается 32-битных библиотек, ситуация довольно проста: вам просто нужно установить соответствующие 32-битные библиотеки. На 64-битной установке fedora 17, которую я имею здесь, основные 64-битные библиотеки находятся в / usr / lib64, а дополнительные 32-битные библиотеки находятся в / usr / lib. Итак, если я
ldd
зайду на sdk / platform-tools / adb:Обратите внимание, что все они находятся в / lib, который является символической ссылкой на / usr / lib (не / usr / lib64). Посмотрите:
32-битная стандартная библиотека C. Что вы можете сделать, так это просмотреть 32-битные инструменты SDK и проверить, с чем они связаны
ldd
. У меня нет примера под рукой, но если чего-то не хватает,ldd
выдает что-то вроде:Во-первых , для работы ldd вам понадобится 32-битный загрузчик, который поставляется с 32-битным glibc (без этого ldd будет называть это неисполняемым файлом и ничего вам не скажет):
Это усечено, но пакет x86_64 - это то, что у вас уже есть; i686 - это 32-битная версия. Так что просто установите это.
Вам не нужны никакие пакеты 'devel', так как ничего не компилируется. Кроме того, образованные догадки и
yum whatprovides
/yum search
должны помочь (глядя на список для adb, есть также 32-битные версии C ++ lib, ncurses, pthreads и некоторые вещи, которые я не знаю).Быстрый совет по использованию
whatprovides
:;)
источник
ldd
. По причине: я не убежден, обращаясьfile
к пакетной версииadb
дисплеев: ELF 32-битный исполняемый LSB, Intel 80386 - не имеет ничего общего с эмуляцией ARM - и / usr / bin / adb (из пакета andora-tools fedora) на самом деле доступен как ELF 64-битный исполняемый файл LSB, x86-64 .adt-bundle-linux/sdk/platform-tools/adb
он отображает «не динамический исполняемый файл». Что касается PATH - это не проблема - полное указание пути, например,./adt-bundle-linux/sdk/platform-tools/adb
в терминале, не работает (приводит к 'zsh: нет такого файла или каталога [..]').Вы должны установить 32-битный glibc:
Это удаляет вводящее в заблуждение сообщение «нет такого файла или каталога» при попытке выполнить 32-разрядный двоичный файл. При этом 64-битная система Fedora способна выполнять 32-битные двоичные файлы.
Это также удаляет вводящее в заблуждение сообщение «не динамический исполняемый файл»
ldd
при вызовеldd
32-разрядного динамического исполняемого файла.Теперь вам нужно установить недостающие 32-битные библиотеки, с
adt-bundle-linux/sdk/platform-tools
которыми связаны двоичные файлы :Это оно.
Задний план
Некоторые сведения о том, как получить названные выше имена пакетов. Например, глядя на вывод
означает, что 2 библиотеки по-прежнему отсутствуют для ADB.
Для каждого «не найден» мы должны искать имя пакета, например:
Теперь мы берем базовое имя пакета и добавляем к нему «.i686», чтобы получить 32-битную версию.
источник
glibc.i686
позволяетldd
правильно работать с двоичными файлами i386.Вы можете установить необходимый пакет с помощью:
источник