Ошибка "Нет такого файла или каталога" в bash, но файл существует?
В Ubuntu при попытке выполнить команду появляется ошибка "Нет такого файла или каталога".
Я проверил с ls -la
, файл adb
там и он имеет флаг 'x' Так почему я получаю "Нет такого файла или каталога"?
~/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
7 ответов
Это исполняемый файл, в котором отсутствуют необходимые библиотеки. использование ldd
чтобы увидеть, что ему нужно, предоставьте эти файлы.
Android SDK требует 32-битных библиотек. Вы, вероятно, на 64-битной и вам нужны 32-битные библиотеки. Вот инструкции по устранению неполадок от developer.android.com
Для Ubuntu 13.10 (Saucy Salamander) и выше установите libncurses5:i386
, libstdc++6:i386
, а также zlib1g:i386
пакеты, использующие apt-get:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386
Для более ранних версий Ubuntu установите ia32-libs
пакет с использованием apt-get:
apt-get install ia32-libs
sudo apt-get install --reinstall libc6-i386
Это также нужно для меня.
Я также видел то же самое после переключения моей машины с 32-битной Ubuntu на 64-битную. Bash сообщит "Нет такого файла или каталога" файлов, которые явно существуют с атрибутом execute.
sudo apt-get install --reinstall libc6-i386
Исправлена проблема. Это "Библиотека GNU C: 32-битные разделяемые библиотеки для AMD64"
Похоже, это ошибка в Bash. Обратите внимание, что я также изменил оболочку по умолчанию с тире на bash, используя
sudo dpkg-refigure dash
прежде чем я попытался запустить 32-битный исполняемый файл. Так что я не уверен, что проблема произошла бы с панелью инструментов по умолчанию
На свежую Xubuntu 13.10 x64 установил у меня adb
бежать с:
sudo apt-get install --reinstall libc6-i386
sudo apt-get install libstdc++6:i386
А также zlib1g:i386
делать aapt
Работа.
и если вы все еще что-то упускаете, используйте:
lld adb
Ubunto, похоже, имеет некоторые проблемы с совместимостью LSB, поэтому попробуйте это, если вы находитесь на Ubunto
apt-get install lsb
Обратите внимание, что ldd будет показывать, что все библиотеки есть, но их нет.
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$
Для adb убедитесь, что вы распаковали SDK и запустили SDK Manager, чтобы полностью заполнить SDK. Кроме того, убедитесь, что у вас установлено следующее: A.) JDK 6 или лучше B.) lib32stdC++ 6 C.) lib32ncurses5
hoffmanc был ближе всех к правильному пониманию, я не очень понимаю, почему ответ от Даниэля Бека помечается как правильный, когда он даже не близок и не имеет никакого отношения к проблеме.
Кстати, если вы попытаетесь запустить действительно несуществующую команду (то есть:
# fakecommand
вы получите: fakecommand: command not found, тогда как в вашей ситуации вывод, который вы видите, на самом деле идет от adb, хотя не совсем понятно, в чем дело.