Erreur «Aucun fichier ou répertoire de ce type» dans bash, mais le fichier existe?

29

Sur Ubuntu, j'obtiens une erreur «Aucun fichier ou répertoire de ce type» lorsque j'essaie d'exécuter une commande.

J'ai vérifié avec ls -la, le fichier adbest là et il a le drapeau 'x' Alors pourquoi j'obtiens un 'Aucun fichier ou répertoire'?

~/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
la source
qu'obtenez-vous si vous courezfile adb
jdigital
j'obtiens ce '$ file adb adb: exécutable ELF 32 bits LSB, Intel 80386, version 1 (SYSV), lié dynamiquement (utilise des bibliothèques partagées), pour GNU / Linux 2.6.8, non supprimé'
michael

Réponses:

16

C'est un fichier exécutable qui manque les bibliothèques requises. Utilisez lddpour voir ce dont il a besoin, puis fournissez ces fichiers.

Daniel Beck
la source
11
j'obtiens ce '$ ldd ./adb pas un exécutable dynamique'
michael
55

Le SDK Android nécessite des bibliothèques 32 bits. Vous êtes probablement sur 64 bits et avez besoin des bibliothèques 32 bits. Voici les instructions de dépannage de developer.android.com

Pour Ubuntu 13.10 (Saucy Salamandre) et au- dessus, installez le libncurses5:i386, libstdc++6:i386, et les zlib1g:i386paquets en utilisant apt-get:

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

Pour les versions antérieures d'Ubuntu, installez le ia32-libspackage à l'aide d'apt-get:

apt-get install ia32-libs
hoffmanc
la source
2
merde qui installe beaucoup de choses. Mais ça marche.
Travis Reeder
1
Comme michael, "file" m'a dit que c'était un binaire ELF 32 bits et ldd m'a dit que ce n'était pas un exécutable dynamique. L'installation de ces bibliothèques 32 bits a résolu le problème.
Éponyme du
2
Message d'erreur le plus trompeur JAMAIS! o_O
MathematicalOrchid
re: {Voici les instructions de dépannage de developer.android.com} Je ne vois aucune instruction de dépannage là-bas ...
ruslo
4
sudo apt-get install --reinstall libc6-i386

est également nécessaire pour moi.

Shawe
la source
3
Voulez-vous dire que cela a aidé? Une idée pourquoi? D'où tenez-vous cela?
Tamara Wijsman
3

Je voyais également la même chose après avoir changé ma machine d'ubuntu 32 bits en 64 bits. Bash signale «Aucun fichier ou répertoire de ce type» de fichiers qui existaient clairement avec l'attribut execute.

sudo apt-get install --reinstall libc6-i386

Correction du problème. Ce sont les "GNU C Library: bibliothèques partagées 32 bits pour AMD64"

On dirait que c'est un bug dans bash. Notez que j'ai également changé le shell par défaut de dash en bash en utilisant

sudo dpkg-reconfigure dash

avant d'essayer d'exécuter l'exécutable 32 bits. Je ne suis donc pas sûr que le problème se soit produit avec le shell de tiret par défaut

user240504
la source
2

Sur une nouvelle installation de Xubuntu 13.10 x64, j'ai pu adbexécuter avec:

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

Et aussi zlib1g:i386pour faire du aapttravail.

et si vous manquez encore quelque chose, utilisez:

lld adb
Stéphane
la source
Cela a très bien fonctionné pour moi, mais j'ai dû appeler sudo dpkg --add-architecture i386; sudo apt-get updatepour rendre libstdc ++ 6: i386 disponible
nicopico
Je pense que vous vouliez direldd adb
Prashanth Chandra
1

Pour adb, assurez-vous que le SDK est décompressé et que vous avez exécuté le gestionnaire de SDK pour remplir entièrement le SDK. Assurez-vous également que les éléments suivants sont installés: A.) JDK 6 ou supérieur B.) lib32stdc ++ 6 C.) lib32ncurses5

hoffmanc était le plus proche de bien faire les choses, je ne comprends pas vraiment pourquoi la réponse de Daniel Beck est marquée comme correcte quand elle n'est même pas proche et n'a rien à voir avec le problème.

Par ailleurs, si vous essayez d'exécuter une commande vraiment inexistante (par exemple:

# fakecommand

vous obtiendrez: fakecommand: commande introuvable, alors que dans votre situation, la sortie que vous voyez vient en fait de adb même si ce n'est pas très clair que c'est le cas.

Justin Buser
la source
1

Ubunto semble avoir quelques problèmes avec la compatibilité LSB, alors essayez ceci si vous êtes sur Ubunto

apt-get install lsb

Notez que ldd montrera en quelque sorte que toutes les bibliothèques sont là, mais elles ne le sont pas.

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
la source
J'avais ce problème avec un package de reconnaissance vocale appelé Julius. C'est ce qui m'a arrangé.
Fireandlight27