Vraag Bestand of map bestaat niet? Maar het bestand bestaat!


Ik heb een spel gedownload (Shank) maar het bin-bestand wordt niet uitgevoerd. De fout die wordt weergegeven wanneer ik het uitvoerbare bestand probeer te starten, is:

bash: ./shank-linux-120720110-1-bin: No such file or directory

149
2018-05-07 19:06


oorsprong


Misschien eerst "chmod u + x ./shank*bin"? - agent86
ook zou dat niet '.bin' moeten zijn in plaats van '-bin', misschien is het gewoon een typfout - Anake
Dank u voor uw antwoord. Ik heb het commando gedaan dat je Agent86 zei, maar ik heb hetzelfde resultaat. Ik heb ook het .deb-bestand gedownload, maar er is ook een probleem. Ik weet niet welk probleem dit spel heeft. - Francesco
Controleer of u een 64-bits installatie uitvoert (dit is de meest voorkomende oorzaak van dit probleem). - Gilles
Ja, ik bevestig dat ik een 64-bits architectuur op mijn laptop gebruik. - Francesco


antwoorden:


U probeert waarschijnlijk een 32-bits binair bestand uit te voeren op een 64-bits systeem waarop geen 32-bits ondersteuning is geïnstalleerd.

Er zijn drie gevallen waarin u het bericht "No such such file or directory" kunt krijgen:

  • Het bestand bestaat niet. Ik neem aan dat je hebt gecontroleerd of het bestand bestaat (misschien omdat de shell het bestand heeft voltooid).
  • Er is een bestand met die naam, maar het is een bengelende symbolische link.
  • Het bestand bestaat, en je kunt het zelfs lezen (bijvoorbeeld het commando file shank-linux-120720110-1-bin geeft iets weer als "ELF 32-bit LSB-uitvoerbaar ..."), en toch, als je het probeert uit te voeren, krijg je te horen dat het bestand niet bestaat.

De foutmelding in dit laatste geval is weliswaar verwarrend. Wat het u vertelt is dat een essentieel onderdeel van de runtime-omgeving dat nodig is om het programma uit te voeren, ontbreekt. Helaas heeft het kanaal waardoor de fout wordt gerapporteerd alleen plaats voor de foutcode en niet voor deze extra informatie dat het echt de runtime-omgeving is die de schuld krijgt. Als je de technische versie van deze uitleg wilt, lees dan Het bericht "Niet gevonden" krijgen bij het uitvoeren van een 32-bits binair bestand op een 64-bits systeem.

De file commando zal je precies vertellen wat dit binary is. Met een paar uitzonderingen kun je alleen een binary uitvoeren voor de processorarchitectuur waarvoor je versie van Ubuntu is bedoeld. De belangrijkste uitzondering is dat u 32-bits (x86, a.k.a. IA32) binaire bestanden kunt uitvoeren op 64-bits (amd64, a.k.a. x86_64) systemen.

In Ubuntu tot 11.04, om een ​​32-bits binair bestand op een 64-bits installatie uit te voeren, moet dit installeer de ia32-libs pakket  Install ia32-libs. Mogelijk moet u extra bibliotheken installeren (als u dat wel doet, krijgt u een expliciete foutmelding).

Sinds 11.10 (oneiric) geïntroduceerd multiarch ondersteuning, u kunt nog steeds installeren ia32-libs, maar je kunt een fijnere korrelbenadering kiezen, het is genoeg om te krijgen libc6-i386  Install libc6-i386 (plus een andere noodzakelijke bibliotheek).


201
2018-05-07 21:47



Bedankt voor een goed antwoord, Gilles. Hoewel ik dit probleem (nog) niet heb ervaren, heb ik je antwoord weggeschreven voor toekomstig gebruik. - Jim C
Bedankt voor je uitgebreide antwoord! De bestandsbak die ik heb gedownload was de enige die beschikbaar was in dit formaat (bin). Dus ik denk dat het goed is voor alle architecturen. Ik heb ook het .deb-bestand gedownload voor mijn architectuur (64-bits) maar met een andere fout. Op dit moment denk ik dat de game wordt beïnvloed door een aantal bugs of dat ik deze game niet kan installeren. Nu probeer ik libc6-i386 te downloaden en ik probeer het nog steeds te installeren. Ik zal opnieuw schrijven als er belangrijke veranderingen zijn. Bedankt voor je tijd. - Francesco
@Francesco Plaats alstublieft de oplossing! Het is waarschijnlijk dat andere mensen proberen Shank op Ubuntu te laten lopen. Het is prima om je eigen vraag te beantwoorden. - Gilles
Je kunt gebruiken ldd om te controleren of je een bibliotheek mist. ldd kgio_ext.so zou zoiets kunnen zeggen libruby.so.2.3 => not found onder andere - EnabrenTane
Er is blijkbaar een ander scenario wanneer bash: ...some...path...: No such file or directory kan worden weergegeven: na het verplaatsen van het uitvoerbare bestand. Bash lijkt paden te cachen naar uitvoerbare bestanden die te vinden zijn in $ PATH; rennen hash -r om het te verwijderen. Zien: unix.stackexchange.com/a/5610/11352 - akavel


64 bit Ubuntu Multiarch-systemen

Volg dit antwoord alleen als de uitvoer van file file-name shows,

file-name: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

Om een ​​32-bits uitvoerbaar bestand uit te voeren in een 64-bits Ubuntu-systeem met meerdere bogen, moet u toevoegen i386 architectuur en ook moet je installeren libc6:i386,libncurses5:i386,libstdc++6:i386 deze drie bibliotheekpakketten.

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name

40
2018-04-24 13:14



Ik zou sudo gebruiken voor de laatste opdracht: een 32-bits binair bestand (dus duidelijk niet samengesteld door jou of Ubuntu) lanceren omdat sudo riskant zou kunnen zijn. (nou ja, zelfs als niet-root, admitedly) - alci
wat het ook is, maar het werkt. - Avinash Raj
Houd er rekening mee dat als u CentOS of RedHat gebruikt, dit antwoord niet van toepassing is. Werd hierdoor voor een paar uur weggegooid. - oMiKeY
Op Kali 2 64 bit hoefde ik alleen te installeren libselinux1:i386 - Aralox


Door de deb voor 32 bit te installeren, realiseerde ik me dat ik enkele bibliotheken miste (naast ia32-libs en libc6). Ik heb dit probleem voor het eerst opgelost door dit commando te geven:

sudo apt-get install -f          

Toen kreeg ik nog een foutmelding:

Message: SDL_GL_LoadLibrary 
Error: Failed loading libGL.so.1

Het is duidelijk dat deze bibliotheken correct zijn geïnstalleerd. Zonder in details te treden, moest ik de bibliotheken handmatig koppelen. Ik besefte toen dat ook een eenvoudigere oplossing via Synaptic de volgende pakketten kon installeren:

libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.

Daarna was het volgende probleem het zwarte scherm tijdens het spelen, wat ik heb opgelost door het uitvoerbare bestand in / Shank / bin te vervangen door dit: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar.bz2.

Ik hoop dat het nuttig voor iemand zal zijn. Als je meer hulp of meer informatie nodig hebt, neem dan gerust contact met me op.


4
2018-05-09 19:12





Hier is een transcriptie die iets meer te weten komt over de aard van het probleem, en hoe het te repareren vanaf Ubuntu 16.04. Merk op dat, hoewel file rapporten "dynamisch gekoppeld", ldd rapporteert "niet een dynamisch uitvoerbaar bestand".

$ ./myprogram
bash: myprogram: No such file or directory

$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped

$ ldd myprogram
    not a dynamic executable

Zodra je libc6: i386 hebt geïnstalleerd, begint het te verbeteren ...

$ sudo apt-get install libc6:i386 # the initial fix
...

$ ldd myprogram
    linux-gate.so.1 =>  (0xf77fd000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
    /lib/ld-linux.so.2 (0x56578000)

$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

Om de taak te voltooien, moet u mogelijk meerdere bibliotheken één voor één identificeren en installeren ...

$ sudo apt-get install libstdc++6:i386 ## may require various additional libs

$ ./myprogram
... works correctly ...

Ik weet niet of er een systematische manier is om de juiste te installeren bibliotheken te identificeren. Er is wat giswerk om de foutmeldingen in kaart te brengen bij pakketnamen (hulp bij het invullen van tabbladen).


3
2018-06-08 20:57



ldd (onjuist) rapporteert "niet een dynamisch uitvoerbaar bestand". - nobar


Om het @ Gilles-antwoord uit te breiden, zijn er ten minste drie scenario's die in deze fout resulteren:

  1. Het bestand bestaat niet.
  2. Het bestand bestaat, maar is een bengelende symbolische link.
  3. Het bestand bestaat (bijv. file opdracht werkt), waardoor een raadselachtige foutmelding wordt gegeven. Dit kan betekenen dat er een probleem is met de lader.

Categorieën van laderproblemen:

  1. De loader van een uitvoerbaar bestand bestaat niet. U kunt dit controleren met de opdracht file en zien of de loader wel bestaat. Bijv.

    file lmgrd
    lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
    

    Merk op interpreter /lib64/ld-lsb-x86-64.so.3; als dit bestand niet bestaat, moet u het installeren. Voor deze specifieke loader op 16.04 bleek het antwoord sudo apt-get install lsb.

  2. Problemen met de lader van een script (zie dit antwoord).

  3. Ontbrekende gedeelde bibliotheken - gebruik ldd <file-name> om te controleren op eventuele "niet gevonden" bibliotheken. Zien dit antwoord voor meer informatie.

De lader die niet bestond kon te wijten zijn aan een 32/64 bit mismatch of een andere reden. Er zijn mogelijk andere soorten laderfouten die ik niet ken.


2
2018-05-11 18:54



In mijn geval, file lmutil heeft de tolk niet getoond, maar ldd deed en installeerde lsb probleem opgelost. - meowsqueak