Błąd „Brak takiego pliku lub katalogu” w bash, ale plik istnieje?

29

W systemie Ubuntu pojawia się błąd „Brak takiego pliku lub katalogu”, gdy próbuję wykonać polecenie.

Sprawdziłem za pomocą ls -la, plik adbjest tam i ma flagę „x”. Dlaczego więc pojawia się komunikat „Brak takiego pliku lub katalogu”?

~/Programs/android-sdk-linux_x86/platform-tools$ ./adb
 bash: ./adb: No such file or directory
~/Programs/android-sdk-linux_x86/platform-tools$ ls -la
 total 34120
 drwxrwxr-x 3 silverstri silverstri     4096 2011-10-08 18:50 .
 drwxrwxr-x 8 silverstri silverstri     4096 2011-10-08 18:51 ..
 -rwxrwxr-x 1 silverstri silverstri  3764858 2011-10-08 18:50 aapt
 -rwxrwxr-x 1 silverstri silverstri   366661 2011-10-08 18:50 adb
 -rwxrwxr-x 1 silverstri silverstri   906346 2011-10-08 18:50 aidl
 -rwxrwxr-x 1 silverstri silverstri   328445 2011-10-08 18:50 dexdump
 -rwxrwxr-x 1 silverstri silverstri     2603 2011-10-08 18:50 dx
 drwxrwxr-x 2 silverstri silverstri     4096 2011-10-08 18:50 lib
 -rwxrwxr-x 1 silverstri silverstri 14269620 2011-10-08 18:50 llvm-rs-cc
 -rwxrwxr-x 1 silverstri silverstri 14929076 2011-10-08 18:50 llvm-rs-cc-2
 -rw-rw-r-- 1 silverstri silverstri      241 2011-10-08 18:50 llvm-rs-cc.txt
 -rw-rw-r-- 1 silverstri silverstri   332494 2011-10-08 18:50 NOTICE.txt
 -rw-rw-r-- 1 silverstri silverstri      291 2011-10-08 18:50 source.properties
Michał
źródło
co dostaniesz, jeśli pobiegnieszfile adb
jdigital
otrzymuję ten plik $ adb adb: ELF 32-bitowy plik wykonywalny LSB, Intel 80386, wersja 1 (SYSV), dynamicznie połączony (korzysta ze współdzielonych bibliotek), dla GNU / Linux 2.6.8, bez pasowania '
Michael

Odpowiedzi:

16

Jest to plik wykonywalny, w którym brakuje wymaganych bibliotek. Użyj, lddaby zobaczyć, czego potrzebuje, a następnie podaj te pliki.

Daniel Beck
źródło
11
dostaję ten „$ ldd ./adb nie dynamiczny plik wykonywalny”
michael
55

Zestaw Android SDK wymaga bibliotek 32-bitowych. Prawdopodobnie korzystasz z wersji 64-bitowej i potrzebujesz 32-bitowej biblioteki lib. Oto wskazówki dotyczące rozwiązywania problemów z developer.android.com

Ubuntu 13.10 (Saucy Salamander) i powyżej, zainstalować libncurses5:i386, libstdc++6:i386, i zlib1g:i386pakiety używając apt-get:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386

W przypadku wcześniejszych wersji Ubuntu zainstaluj ia32-libspakiet za pomocą apt-get:

apt-get install ia32-libs
hoffmanc
źródło
2
cholera, która instaluje wiele rzeczy. Ale to działa.
Travis Reeder
1
Podobnie jak Michael, „file” powiedział mi, że to 32-bitowy plik binarny ELF, a ldd powiedział mi, że nie jest to dynamiczny plik wykonywalny. Zainstalowanie tych 32-bitowych bibliotek rozwiązało problem.
Tytułowy
2
Najbardziej mylący komunikat o błędzie KIEDYKOLWIEK! o_O
MathematicalOrchid
re: {Oto wskazówki dotyczące rozwiązywania problemów z developer.android.com} Nie widzę tam żadnych wskazówek dotyczących rozwiązywania problemów ...
ruslo,
4
sudo apt-get install --reinstall libc6-i386

jest także dla mnie potrzebny.

Shawe
źródło
3
Miałeś na myśli, że to pomogło? Masz pomysł, dlaczego? Skąd to masz?
Tamara Wijsman,
3

To samo widziałem po zmianie mojego komputera z 32-bitowego Ubuntu na 64-bitowy. Bash zgłasza „Brak takiego pliku lub katalogu” plików, które wyraźnie istniałyby z atrybutem wykonania.

sudo apt-get install - reinstall libc6-i386

Naprawiono problem. Są to „Biblioteka GNU C: 32-bitowe biblioteki współdzielone dla AMD64”

Wygląda na to, że to błąd w bashu. Zauważ, że zmieniłem również domyślną powłokę z dash na bash za pomocą

sudo dpkg-rekonfiguracja myślnika

zanim spróbowałem uruchomić 32-bitowy plik wykonywalny. Nie jestem więc pewien, czy problem wystąpiłby z domyślną powłoką deski rozdzielczej

użytkownik240504
źródło
2

Na nowej instalacji Xubuntu 13.10 x64 muszę adburuchomić z:

sudo apt-get install --reinstall libc6-i386
sudo apt-get install libstdc++6:i386

A także zlib1g:i386do aaptpracy.

a jeśli nadal coś przegapisz, użyj:

lld adb
Stéphane
źródło
Działa to świetnie dla mnie, ale musiałem zadzwonić, sudo dpkg --add-architecture i386; sudo apt-get updateaby udostępnić libstdc ++ 6: i386
nicopico
Myślę, że miałeś na myślildd adb
Prashanth Chandra
1

W przypadku adb upewnij się, że masz SDK rozpakowany i uruchomiłeś SDK Manager, aby w pełni wypełnić SDK. Dodatkowo upewnij się, że masz zainstalowane następujące elementy: A.) JDK 6 lub nowszy B.) lib32stdc ++ 6 C.) lib32ncurses5

hoffmanc był najbliżej poprawnego rozwiązania. Naprawdę nie rozumiem, dlaczego odpowiedź Daniela Becka jest oznaczona jako poprawna, gdy nie jest nawet blisko i nie ma nic wspólnego z problemem.

Nawiasem mówiąc, jeśli spróbujesz uruchomić naprawdę nieistniejące polecenie (tj .:

# fakecommand

dostaniesz: fakecommand: komenda nie została znaleziona, podczas gdy w twojej sytuacji, wynik, który widzisz, faktycznie pochodzi z adb, chociaż nie jest to do końca jasne.

Justin Buser
źródło
1

Wydaje się, że Ubunto ma pewne problemy ze zgodnością LSB, więc spróbuj tego, jeśli korzystasz z Ubunto

apt-get install lsb

Zauważ, że ldd pokaże, że wszystkie biblioteki są tam, ale ich nie ma.

usmp-vm-lamp01$ ldd lmgrd
 linux-vdso.so.1 =>  (0x00007fffb33fe000)
 libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f10b0a48000)
 libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f10b074c000)
 libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f10b0535000)
 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f10b0175000)
 libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f10aff71000)
 /lib64/ld-lsb-x86-64.so.3 => /lib64/ld-linux-x86-64.so.2 (0x00007f10b0c67000)
usmp-vm-lamp01$ locate libpthread.so.0
/lib/x86_64-linux-gnu/libpthread.so.0
usmp-vm-lamp01$ locate libm.so.6
/lib/x86_64-linux-gnu/libm.so.6
usmp-vm-lamp01$ locate /lib64/ld-lsb-x86-64.so.3
usmp-vm-lamp01$
Mark Lakata
źródło
Miałem ten problem z pakietem rozpoznawania mowy o nazwie Julius. To właśnie mnie naprawiło.
Fireandlight27,