Kesalahan 'Tidak ada file atau direktori' di bash, tetapi file itu ada?

29

Di Ubuntu, saya mendapatkan kesalahan 'Tidak ada file atau direktori' ketika saya mencoba menjalankan perintah.

Saya telah memeriksa ls -la, file adbada di sana dan memiliki bendera 'x' Jadi mengapa saya mendapatkan 'Tidak ada file atau direktori'?

~/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
michael
sumber
apa yang Anda dapatkan jika Anda menjalankanfile adb
jdigital
saya mendapatkan '$ file adb adb: ELF 32-bit LSB executable, Intel 80386, versi 1 (SYSV), terhubung secara dinamis (menggunakan shared libs), untuk GNU / Linux 2.6.8, tidak dilucuti'
michael

Jawaban:

16

Ini adalah file yang dapat dieksekusi yang merindukan perpustakaan yang diperlukan. Gunakan ldduntuk melihat apa yang dibutuhkan, lalu berikan file-file ini.

Daniel Beck
sumber
11
saya mendapatkan ini '$ ldd ./adb bukan eksekusi dinamis'
michael
55

Android SDK membutuhkan perpustakaan 32-bit. Anda mungkin menggunakan 64-bit dan membutuhkan 32-bit libs. Berikut adalah petunjuk pemecahan masalah dari developer.android.com

Untuk Ubuntu 13.10 (Saucy Salamander) dan di atas, menginstal libncurses5:i386, libstdc++6:i386dan zlib1g:i386paket menggunakan apt-get:

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

Untuk versi Ubuntu yang lebih lama, instal ia32-libspaket menggunakan apt-get:

apt-get install ia32-libs
hoffmanc
sumber
2
Sialan itu menginstal banyak hal. Tapi itu berhasil.
Travis Reeder
1
Seperti michael, "file" mengatakan kepada saya bahwa itu adalah biner ELF 32 bit dan ldd mengatakan kepada saya bahwa itu bukan eksekusi dinamis. Menginstal pustaka 32 bit ini memperbaiki masalah.
Eponim
2
Pesan kesalahan yang paling menyesatkan PERNAH! o_O
MathematicalOrchid
re: {Berikut ini petunjuk arah pemecahan masalah dari developer.android.com} Saya tidak melihat petunjuk pemecahan masalah di sana ...
ruslo
4
sudo apt-get install --reinstall libc6-i386

juga perlu bagi saya.

Shawe
sumber
3
Apakah maksud Anda itu membantu? Ada yang tahu kenapa? Darimana kamu mendapatkan ini?
Tamara Wijsman
3

Saya juga melihat hal yang sama setelah mengganti mesin saya dari 32 bit ubuntu ke 64 bit. Bash akan melaporkan 'Tidak ada file atau direktori' file yang jelas ada dengan atribut eksekusi.

sudo apt-get install --reinstall libc6-i386

Memperbaiki masalah. Ini adalah "Perpustakaan GNU C: perpustakaan bersama 32-bit untuk AMD64"

Sepertinya ini adalah bug di bash. Perhatikan bahwa saya juga mengubah shell default dari dash ke bash menggunakan

sudo dpkg-konfigurasi ulang dasbor

sebelum saya mencoba menjalankan executable 32 bit. Jadi saya tidak yakin apakah masalah akan terjadi dengan shell dasbor default

pengguna240504
sumber
2

Pada instal Xubuntu 13.10 x64 yang baru saya harus adbmenjalankan dengan:

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

Dan juga zlib1g:i386untuk membuat aaptpekerjaan.

dan jika Anda masih melewatkan sesuatu gunakan:

lld adb
Stéphane
sumber
Ini bekerja sangat baik untuk saya, tetapi saya harus menelepon sudo dpkg --add-architecture i386; sudo apt-get updateuntuk membuat libstdc ++ 6: i386 tersedia
nicopico
Saya pikir Anda maksudldd adb
Prashanth Chandra
1

Untuk adb, pastikan Anda telah membuka SDK dan menjalankan SDK Manager untuk mengisi penuh SDK. Selain itu pastikan Anda telah menginstal yang berikut: A.) JDK 6 atau lebih baik B.) lib32stdc ++ 6 C.) lib32ncurses5

hoffmanc adalah yang paling dekat untuk memperbaikinya, saya tidak begitu mengerti mengapa jawaban dari Daniel Beck ditandai sebagai benar ketika itu bahkan tidak dekat dan tidak ada hubungannya dengan masalah.

Kebetulan, jika Anda mencoba menjalankan perintah yang benar-benar tidak ada (yaitu:

# fakecommand

Anda akan mendapatkan: fakecommand: perintah tidak ditemukan, sedangkan dalam situasi Anda output yang Anda lihat sebenarnya berasal dari adb meskipun tidak begitu jelas itu yang terjadi.

Justin Buser
sumber
1

Ubunto tampaknya memiliki beberapa masalah dengan kompatibilitas LSB, jadi coba ini jika Anda menggunakan Ubunto

apt-get install lsb

Perhatikan bahwa ldd akan mengurutkan menunjukkan bahwa semua perpustakaan ada di sana, tetapi tidak.

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
sumber
Saya mengalami masalah ini dengan paket pengenalan suara yang disebut Julius. Inilah yang diperbaiki untuk saya.
Fireandlight27