Chociaż pakiet narzędzi programistycznych dla systemu Android (ADT) jest dostępny jako pakiet zip dla „Linuksa w wersji 64-bitowej”, określa następujące wymagania :
Dystrybucje 64-bitowe muszą obsługiwać aplikacje 32-bitowe.
I rzeczywiście, samo uruchomienie spakowanego zaćmienia w 64-bitowym systemie Fedora 17 powoduje błędy, ponieważ nie może „znaleźć” kilku narzędzi programistycznych, np. adb
Lub aapt
:
Błąd podczas wykonywania aapt: Nie można uruchomić programu "/ home / juser / local / adt-bundle-linux / sdk / platform-tools / aapt": error = 2, Brak takiego pliku lub katalogu: error = 2, Brak takiego pliku lub katalogu
„Brak takiego pliku” wprowadza w błąd, ponieważ istnieje (w katalogu $ HOME / local):
adt-bundle-linux/sdk/platform-tools/aapt
Ale nie mogę wykonać go na powłoce:
~/local $ ./adt-bundle-linux/sdk/platform-tools/aapt
zsh: no such file or directory: ./adt-bundle-linux/sdk/platform-tools/aapt
Patrząc na plik
$ 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
widzimy, że jest to 32 binarny. I wydaje się, że mój system (obecnie) nie jest w stanie uruchomić aplikacji 32-bitowych.
Jak to zmienić? Jak sprawić, by bieżący 64-bitowy system Fedory mógł uruchamiać aplikacje 32-bitowe?
(Oczywiście można również zapytać, dlaczego ktoś umieszcza 32-bitowe pliki binarne w pakiecie binarnym o nazwie „Linux 64 bit” ...)
Odpowiedzi:
W związku z niemożnością znalezienia zaćmienia
adb
itp., Ponieważ bez 32-bitowych bibliotek współdzielonych potrzebnych do uruchomienia ich w systemie, nie są one wykonywalne.W przypadku bibliotek 32-bitowych sytuacja jest dość prosta: wystarczy zainstalować odpowiednie biblioteki 32-bitowe. Na 64-bitowej instalacji fedora 17, którą tu mam, podstawowe 64-bitowe biblioteki znajdują się w / usr / lib64, a opcjonalne 32-bitowe biblioteki lib znajdują się w / usr / lib. Więc jeśli zadzwonię
ldd
na sdk / platform-tools / adb:Zauważ, że wszystkie są w / lib, które jest dowiązaniem symbolicznym do / usr / lib (nie / usr / lib64). Popatrz:
32-bitowa standardowa biblioteka C. Co możesz zrobić, to przejrzeć 32-bitowe narzędzia SDK i sprawdzić, z czym są połączone
ldd
. Nie mam podanego przykładu, ale jeśli czegoś brakuje,ldd
zgłasza coś takiego:Po pierwsze , aby ldd działał, będziesz potrzebował 32-bitowego programu ładującego, który jest dostarczany z 32-bitowym glibc (bez tego ldd nazwie go plikiem niewykonywalnym i nic ci nie powie):
To jest obcięte, ale pakiet x86_64 jest już tym, co już masz; i686 to wersja 32-bitowa. Więc po prostu to zainstaluj.
Nie potrzebujesz żadnego z pakietów „devel”, ponieważ nic się nie kompiluje. Poza tym, wykształcone domysły i
yum whatprovides
/yum search
powinny pomóc (patrząc na listę adb, są też 32-bitowe wersje biblioteki C ++ lib, ncurses, pthreads i kilka innych rzeczy, których nie wiem).Szybka wskazówka na temat korzystania z
whatprovides
:;)
źródło
ldd
. Z tego powodu: Nie jestem przekonany, wzywającfile
pakietową wersjęadb
wyświetlaczy: 32-bitowy plik ELF 32-bitowy plik LSB, Intel 80386 - nie ma nic wspólnego z emulacją ARM - i / usr / bin / adb (z pakietu fedora na Androida-narzędzia) jest faktycznie dostępny jako 64-bitowy plik ELF 64-bitowy LSB, x86-64 .adt-bundle-linux/sdk/platform-tools/adb
, wyświetli się komunikat „nie jest dynamicznym plikiem wykonywalnym”. Jeśli chodzi o ŚCIEŻKĘ - to nie jest problem - pełne określenie ścieżki np../adt-bundle-linux/sdk/platform-tools/adb
W terminalu nie działa (powoduje to „zsh: brak takiego pliku lub katalogu [..]”).Musisz zainstalować 32-bitowy glibc:
Usuwa to mylący komunikat „nie ma takiego pliku lub katalogu” podczas próby uruchomienia 32-bitowego pliku binarnego. Dzięki temu 64-bitowy system Fedora może wykonywać 32-bitowe pliki binarne.
Usuwa to również mylący komunikat „nie jest dynamicznym plikiem wykonywalnym”
ldd
podczas wywoływanialdd
32-bitowego dynamicznego pliku wykonywalnego.Teraz musisz zainstalować brakujące biblioteki 32-bitowe, z
adt-bundle-linux/sdk/platform-tools
którymi powiązane są pliki binarne :Otóż to.
tło
Niektóre informacje na temat uzyskiwania powyższych nazw pakietów. Na przykład patrząc na wynik
oznacza, że nadal brakuje 2 bibliotek dla adb.
Dla każdego „nie znalezionego” musimy wyszukać nazwę pakietu, np .:
Teraz bierzemy nazwę bazową pakietu i dodajemy do niej „.i686”, aby uzyskać wersję 32-bitową.
źródło
glibc.i686
pozwalaldd
na poprawną pracę z plikami binarnymi i386.Możesz zainstalować niezbędny pakiet za pomocą:
źródło