我已经下载了一个游戏(Shank),但是bin文件没有运行。我尝试启动可执行文件时显示的错误是:

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


评论

也许先“ chmod u + x ./shank*bin”?

也不应该是'.bin'而不是'-bin',也许这只是一个错字

谢谢您的回复。我已经完成了您说的Agent86命令,但结果相同。我也下载了.deb文件,但是也有问题。我不知道这个游戏有什么问题。

请确认您是否正在运行64位安装(这是此问题最常见的情况)。

@ agent86:否。在这种情况下,错误消息将为“权限被拒绝”。

#1 楼

您可能正在尝试在未安装32位支持的64位系统上运行32位二进制文​​件。

在三种情况下,您会收到以下消息:文件或目录”:


文件不存在。我想您已经检查了该文件是否确实存在(也许是因为shell完成了该文件)。
有一个同名文件,但它是一个悬挂的符号链接。
该文件存在,您可以甚至读取它(例如,命令file shank-linux-120720110-1-bin显示类似“ ELF 32位LSB可执行文件……”的信息),但是当您尝试执行该文件时,系统会告知您该文件不存在。

最后一种情况下的错误消息令人困惑。这说明您缺少运行该程序所需的运行时环境的关键组件。不幸的是,报告错误的通道只为错误代码留有空间,而对于这些额外的信息则没有余地,这实际上归咎于运行时环境。如果您想获得此解释的技术版本,请在64位系统上运行32位二进制文​​件时阅读“获取未找到”消息。

file命令将告诉您该二进制文件是什么。除少数例外,您只能针对您的Ubuntu版本所针对的处理器体系结构运行二进制文件。主要例外是您可以在64位(amd64,aka x86_64)系统上运行32位(x86,IA32)二进制文件。

在Ubuntu 11.04以下版本中,要运行32位如果是64位安装二进制文件,则需要安装ia32-libs软件包。您可能需要安装其他库(如果这样做,将会得到明确的错误消息)。

由于11.10(oneiric)引入了多体系结构支持,因此您仍然可以安装ia32-libs,但是可以选择一个更好的库。粒度的方法,足以获取libc6-i386 (加上任何其他必要的库)。

评论


吉尔斯,非常感谢您的答复。尽管我还没有遇到这个问题(但!),但我已将您的答案归档以备将来参考。

– Jim C
2012年5月7日21:56

感谢您详尽的回答!我下载的文件箱是该格式中唯一可用的文件(箱)。因此,我认为对所有体系结构都有利。我还为我的体系结构(64位)下载了.deb文件,但错误有所不同。在这一点上,我认为游戏受到某些错误的影响,或者我无法安装该游戏。现在,我尝试下载libc6-i386,但仍尝试安装它。如果有重大更改,我将再次写信。谢谢您的时间。

– Francesco
2012年5月7日在22:08

@Francesco请发布解决方案!它可能会帮助其他试图在Ubuntu上运行Shank的人。回答您自己的问题完全可以。

–吉尔斯'所以-不再是邪恶的'
2012年5月9日18:19

您可以使用ldd来检查是否缺少库。 ldd kgio_ext.so可能会说类似libruby.so.2.3 =>的东西

– EnabrenTane
16年3月3日在22:45

当bash出现时,显然还有另一种情况:... some ... path ...:移动可执行文件后,无法显示此类文件或目录。 Bash似乎在$ PATH中缓存了可执行文件的路径。运行hash -r清除它。请参阅:unix.stackexchange.com/a/5610/11352

–akavel
16-12-12在11:25



#2 楼

64位Ubuntu多体系系统
仅当file file-name的输出显示时,才应遵循此答案,
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

要在64位多体系Ubuntu系统中运行32位可执行文件,您必须添加i386体系结构并且还必须安装这三个库软件包libc6:i386libncurses5:i386libstdc++6:i386
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name


评论


我会在最后一个命令中使用sudo:启动32位二进制文​​件(显然不是您或Ubuntu编译的),因为sudo可能会有风险。 (当然,即使是非root用户也可以)

– alci
2014年5月7日下午16:58

最后可能会发生什么,但它可以工作。

– Avinash Raj
2014年5月7日17:01

需要注意的是,如果您使用的是CentOS或RedHat,则此答案不适用。因此被甩了几个小时。

–忽略
17-2-28在23:26

在Kali 2 64位上,我只需要安装libselinux1:i386

– Aralox
17年3月19日在10:57

#3 楼

要扩展@Gilles答案,至少有三种情况会导致此错误:


该文件不存在。
该文件存在但是悬空的符号链接。
文件存在(例如file命令起作用),产生令人费解的错误消息。这可能意味着加载程序存在问题。

加载程序问题的类别:



可执行文件的加载程序不存在。您可以使用file命令检查此内容,并查看加载程序是否存在。例如

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


注意interpreter /lib64/ld-lsb-x86-64.so.3;如果该文件不存在,则需要安装它。对于16.04上的此特定加载程序,答案竟然是sudo apt-get install lsb

脚本加载程序有问题(请参见此答案)。
缺少共享库-使用ldd <file-name>检查是否有任何“找不到”库。有关更多信息,请参见此答案。

加载程序不存在可能是由于32/64位不匹配或其他原因。可能还有其他我不知道的装载程序错误。

评论


在我的情况下,文件lmutil没有显示解释器,但是ldd出现了,安装lsb可以解决问题。

– davidA
18年6月24日在23:05

#4 楼

这是一个抄本,显示了更多有关该问题的性质以及如何从Ubuntu 16.04开始修复该问题的信息。请注意,即使file报告“动态链接”,ldd报告“不是动态可执行文件”。

$ ./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


一旦安装libc6:i386,情况就会开始改善...

$ 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


要完成这项工作,您可能需要一次识别并安装一个附加库...

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

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


我不知道是否有系统的方法来识别要安装的正确库。将错误消息映射到程序包名称时有些猜测(选项卡补全会有所帮助)。

评论


ldd(错误地)报告“不是动态可执行文件”。

– nobar
16年6月9日在15:42

#5 楼

通过安装32位的deb,我意识到我缺少了一些库(除了ia32-libs和libc6)。我首先通过以下命令解决了这个问题:

sudo apt-get install -f          


然后我又遇到了另一个错误:

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


显然,这些库已正确安装。在不详细介绍的情况下,我不得不手工链接库。我意识到然后通过Synaptic安装以下软件包也可能是一个更简单的解决方案:

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


之后,下一个问题是播放时黑屏,我通过替换来解决了/ Shank / bin中的可执行文件具有以下内容:
http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar.bz2。

我希望
如果您需要更多帮助或更多详细信息,请随时与我联系。

#6 楼

Google将我导航到此页面。我的问题与该主题的标题密切相关,因此我将其发布在这里,供像我这样的未来访问者使用:
这是最奇怪的问题之一:
$ ls -lh
ls: cannot access .~dataprep.ipynb: No such file or directory
-????????? ? ?      ?           ?            ? .~dataprep.ipynb
-rw------- 1 tgowda mygroup 475K Jun 12 15:59 dataprep.ipynb

我看到文件.~dataprep.ipynb就在这里,并具有一些奇怪的??权限。
我只是想摆脱那个混乱的文件。
rm命令无法将其删除。 mv命令无法移动它。
然后...
 $ python
>>> from pathlib import Path
>>> list(Path('.').glob("*.ipynb"))
[PosixPath('.~dataprep.ipynb'), PosixPath('dataprep.ipynb')]
>>> p = list(Path('.').glob("*.ipynb"))[0]
>>> p
PosixPath('.~dataprep.ipynb')
>>> p.unlink()
>>> list(Path('.').glob("*.ipynb"))
[PosixPath('dataprep.ipynb')]
 

这就是我能够做到的击败它。

#7 楼

如https://askubuntu.com/a/1035037/676490
sudo apt-get install lsb

解决的问题

#8 楼

在Windows上工作时(由于行分隔符与Linux系统不同而引入了额外的字符),并尝试在Linux中运行此脚本(插入了额外的字符)时,会发生此错误。错误消息具有误导性。

在Windows中,行分隔符为CRLF(\ r \ n),而在Linux中,行分隔符为LF(\ n)。就我而言,这是由于在Windows上工作并上传到Unix服务器上执行而发生的。

评论


提示:在右下角的VSCode中,您可以将行终止符从“ CRLF”更改为“ LF”。

– Kai Noack
20 Mar 24 '15:45