Eu baixei um jogo (Shank), mas o arquivo bin não é executado. O erro que é mostrado quando tento iniciar o executável é:
bash: ./shank-linux-120720110-1-bin: No such file or directory
64-bit
files
games
executable
Francesco
fonte
fonte
Respostas:
Você provavelmente está tentando executar um binário de 32 bits em um sistema de 64 bits que não possui suporte de 32 bits instalado.
Há três casos em que você pode receber a mensagem "Esse arquivo ou diretório não existe":
file shank-linux-120720110-1-bin
exibe algo como "ELF 32-bit LSB executável ...") e, no entanto, quando você tenta executá-lo, é avisado que o arquivo não existe.A mensagem de erro neste último caso é reconhecidamente confusa. O que está lhe dizendo é que falta um componente-chave do ambiente de tempo de execução necessário para executar o programa. Infelizmente, o canal através do qual o erro é relatado tem espaço apenas para o código do erro e não para essas informações extras, as quais são realmente o ambiente de tempo de execução. Se você deseja a versão técnica desta explicação, leia a mensagem Obtendo "Não encontrado" ao executar um binário de 32 bits em um sistema de 64 bits .
O
file
comando irá dizer exatamente o que é esse binário. Com algumas exceções, você pode executar apenas um binário para a arquitetura do processador para a qual é sua versão do Ubuntu. A principal exceção é que você pode executar binários de 32 bits (x86, também conhecido como IA32) em sistemas de 64 bits (amd64, também conhecido como x86_64).No Ubuntu até 11.04, para executar um binário de 32 bits em uma instalação de 64 bits, você precisa instalar o
ia32-libs
pacote . Pode ser necessário instalar bibliotecas adicionais (você receberá uma mensagem de erro explícita).Desde a 11.10 (onírica) introduziu o suporte a multiarcas , você ainda pode instalar
ia32-libs
, mas pode escolher uma abordagem mais refinada, é o suficiente para obter (além de qualquer outra biblioteca necessária).libc6-i386
fonte
ldd
para verificar se está faltando uma biblioteca.ldd kgio_ext.so
poderia dizer algo comolibruby.so.2.3 => not found
, entre outrosbash: ...some...path...: No such file or directory
pode aparecer: depois de mover o arquivo executável. O Bash parece armazenar em cache os caminhos dos executáveis encontrados em $ PATH; correrhash -r
para limpá-lo. Veja: unix.stackexchange.com/a/5610/11352Sistemas Ubuntu Multiarch de 64 bits
Siga esta resposta apenas se a saída dos
file file-name
programas,Para executar o arquivo executável de 32 bits em um multi-arch sistema Ubuntu de 64 bits, você tem que adicionar
i386
arquitetura e também você tem que instalarlibc6:i386
,libncurses5:i386
,libstdc++6:i386
estes três pacotes de bibliotecas.fonte
libselinux1:i386
Ao instalar o deb para 32 bits, percebi que estavam faltando algumas bibliotecas (além de ia32-libs e libc6). Eu primeiro resolvi esse problema, dando este comando:
Então eu recebi outro erro:
Obviamente, essas bibliotecas foram instaladas corretamente. Sem entrar em detalhes, tive que vincular as bibliotecas manualmente. Percebi então que também poderia ser uma solução mais fácil através do Synaptic instalar os seguintes pacotes:
Depois disso, o próximo problema foi a tela preta durante a reprodução, que resolvi substituindo o executável em / Shank / bin por este: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .
Espero que seja útil para alguém. Se precisar de mais ajuda ou mais detalhes, entre em contato comigo.
fonte
Aqui está uma transcrição mostrando um pouco mais sobre a natureza do problema e como corrigi-lo no Ubuntu 16.04. Observe que, embora os
file
relatórios sejam "vinculados dinamicamente", osldd
relatórios "não sejam um executável dinâmico".Depois de instalar o libc6: i386, as coisas começam a melhorar ...
Para concluir o trabalho, pode ser necessário identificar e instalar bibliotecas adicionais, uma de cada vez ...
Não sei se existe uma maneira sistemática de identificar as bibliotecas corretas para instalar. Há um pouco de adivinhação ao mapear as mensagens de erro para os nomes dos pacotes (ajuda na conclusão de guias).
fonte
ldd
(incorretamente) relata "não é um executável dinâmico".Para expandir a resposta do @Gilles, há pelo menos três cenários que resultam neste erro:
file
comando funciona), gerando uma mensagem de erro intrigante. Isso pode significar que há um problema com o carregador.Categorias de problemas do carregador:
O carregador de um executável não existe. Você pode verificar isso usando o comando file e ver se o carregador existe. Por exemplo
Aviso
interpreter /lib64/ld-lsb-x86-64.so.3
; se esse arquivo não existir, você precisará instalá-lo. Para este carregador em particular no 16.04, a resposta acabou sendosudo apt-get install lsb
.Problemas com o carregador de um script (consulte esta resposta ).
ldd <file-name>
para verificar se há bibliotecas "não encontradas". Veja esta resposta para mais informações.O carregador não existente pode ser devido a uma incompatibilidade de 32/64 bits ou por outro motivo. Pode haver outros tipos de erros do carregador que eu não conheço.
fonte
file lmutil
não mostrei o intérprete, masldd
sim, e a instalaçãolsb
resolveu o problema.