Erro 'Não existe esse arquivo ou diretório' no bash, mas o arquivo existe?

29

No Ubuntu, recebo o erro 'Não existe esse arquivo ou diretório' quando tento executar um comando.

Eu verifiquei com ls -la, o arquivo adbestá lá e tem o sinalizador 'x' Então, por que estou recebendo o 'Não existe esse arquivo ou diretório'?

~/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
fonte
o que você ganha se você executar #file adb
9607
Eu recebo este '$ file adb adb: ELF executável LSB de 32 bits, Intel 80386, versão 1 (SYSV), vinculado dinamicamente (usa libs compartilhadas), para GNU / Linux 2.6.8, sem remoção'
michael

Respostas:

16

É um arquivo executável que perde as bibliotecas necessárias. Use lddpara ver o que ele precisa e forneça esses arquivos.

Daniel Beck
fonte
11
eu recebo este '$ ldd ./adb não um executável dinâmica'
michael
55

O SDK do Android requer bibliotecas de 32 bits. Você provavelmente está em 64 bits e precisa das bibliotecas de 32 bits. Aqui estão as instruções para solução de problemas em developer.android.com

Para o Ubuntu 13.10 (Saucy Salamander) e acima, instale o libncurses5:i386, libstdc++6:i386, e zlib1g:i386pacotes usando apt-get:

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

Para versões anteriores do Ubuntu, instale o ia32-libspacote usando o apt-get:

apt-get install ia32-libs
hoffmanc
fonte
2
droga que instala um monte de coisas. Mas funciona.
Travis Reeder
1
Como Michael, "arquivo" me disse que era um binário ELF de 32 bits e o ldd me disse que não era um executável dinâmico. A instalação dessas bibliotecas de 32 bits corrigiu o problema.
Eponymous
2
Mensagem de erro mais enganosa SEMPRE! o_O
MathematicsOrchid
re: {Aqui estão as indicações de solução de problemas de developer.android.com} Não vejo quaisquer indicações de solução de problemas lá ...
ruslo
4
sudo apt-get install --reinstall libc6-i386

também é necessário para mim.

Shawe
fonte
3
Você quis dizer que ajudou? Alguma idéia do porquê? Onde você conseguiu isso?
Tamara Wijsman
3

Eu também estava vendo o mesmo depois de mudar minha máquina do ubuntu de 32 bits para o de 64 bits. O Bash reportaria 'Esse arquivo ou diretório' não existe claramente com o atributo execute.

sudo apt-get install --reinstall libc6-i386

Corrigido o problema. Estas são as "Bibliotecas GNU C: bibliotecas compartilhadas de 32 bits para AMD64"

Parece que isso é um bug no bash. Observe que eu também mudei o shell padrão de dash para bash usando

traço sudo dpkg-reconfigure

antes de eu tentar executar o executável de 32 bits. Portanto, não tenho certeza se o problema teria acontecido com o shell de traço padrão

user240504
fonte
2

Em uma nova instalação do Xubuntu 13.10 x64, executei adb:

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

E também zlib1g:i386para fazer o aapttrabalho.

e se você ainda perder algo, use:

lld adb
Stéphane
fonte
Isso funcionou muito bem para mim, mas eu tive que chamar sudo dpkg --add-architecture i386; sudo apt-get updatepara fazer libstdc ++ 6: i386 disponível
nicopico
Eu acho que você quis dizerldd adb
Prashanth Chandra
1

Para adb, verifique se o SDK foi descompactado e se executou o SDK Manager para preencher completamente o SDK. Além disso, verifique se você possui o seguinte instalado: A.) JDK 6 ou superior B.) lib32stdc ++ 6 C.) lib32ncurses5

hoffmanc foi o mais próximo de acertar, eu realmente não entendo por que a resposta de Daniel Beck é marcada como correta quando não está nem perto e não tem nada a ver com o problema.

Aliás, se você tentar executar um comando verdadeiramente inexistente (ou seja:

# fakecommand

você receberá: fakecommand: comando não encontrado, enquanto na sua situação a saída que você está vendo é realmente proveniente do adb, embora não seja muito claro o caso.

Justin Buser
fonte
1

O Ubunto parece ter alguns problemas com a compatibilidade com LSB, então tente isso se você estiver no Ubunto

apt-get install lsb

Observe que o ldd meio que mostra que todas as bibliotecas estão lá, mas não estão.

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
fonte
Eu estava tendo esse problema com um pacote de reconhecimento de fala chamado Julius. Foi isso que o corrigiu para mim.
Fireandlight27