我下载了一个游戏(Shank),但是 bin 文件无法运行。我尝试启动可执行文件时显示的错误是:
bash: ./shank-linux-120720110-1-bin: No such file or directory
答案1
您可能正在尝试在未安装 32 位支持的 64 位系统上运行 32 位二进制文件。
在三种情况下,您可能会收到“没有此文件或目录”消息:
- 该文件不存在。我假设您已经检查过该文件是否存在(可能是因为 shell 完成了它)。
- 有一个同名的文件,但它是一个悬空的符号链接。
- 该文件存在,您甚至可以读取它(例如,命令
file shank-linux-120720110-1-bin
显示类似“ELF 32 位 LSB 可执行文件...”),但是当您尝试执行它时,您会被告知该文件不存在。
最后一种情况下的错误消息确实令人困惑。它告诉你的是,缺少运行程序所需的运行时环境的一个关键组件。不幸的是,报告错误的渠道只能容纳错误代码,而不能容纳这些额外的信息,而这些额外的信息实际上是运行时环境造成的。如果你想要这个解释的技术版本,请阅读在 64 位系统上运行 32 位二进制文件时出现“未找到”消息。
该file
命令将告诉您这个二进制文件到底是什么。除了少数例外,您只能运行适用于您的 Ubuntu 版本的处理器架构的二进制文件。主要例外是您可以在 64 位(amd64,又名 x86_64)系统上运行 32 位(x86,又名 IA32)二进制文件。
在 Ubuntu 11.04 及以上版本中,要在 64 位安装上运行 32 位二进制文件,您需要安装ia32-libs
包裹 。您可能需要安装额外的库(如果这样做,您会收到一条明确的错误消息)。
自 11.10 (oneiric) 开始引入多架构支持,你仍然可以安装ia32-libs
,但你可以选择更细粒度的方法,这足以获得libc6-i386
(加上任何其他必要的库)。
答案2
64 位 Ubuntu Multiarch 系统
仅当输出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:i386
、libncurses5:i386
这libstdc++6:i386
三个库包。
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
答案3
扩展@Gilles 的回答,至少有三种情况导致此错误:
- 该文件不存在。
- 该文件存在但是是一个悬空的符号链接。
- 文件存在(例如
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 位不匹配或其他原因。可能还有其他我不知道的加载器错误。
答案4
通过安装 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。
我希望这对某些人有用。如果您需要更多帮助或更多详细信息,请随时联系我。