Fra*_*sco 231 64-bit files games executable
我下载了一个游戏 (Shank) 但 bin 文件没有运行。我尝试启动可执行文件时显示的错误是:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 278
您可能正在尝试在未安装 32 位支持的 64 位系统上运行 32 位二进制文件。
在三种情况下,您会收到“没有这样的文件或目录”消息:
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)引入了multiarch支持,还是可以安装的ia32-libs
,但是可以选择更细粒度的方式,就足够了libc6-i386
(加上任何其他必要的库)。
Avi*_*Raj 68
仅当输出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
Run Code Online (Sandbox Code Playgroud)
要在 64 位多i386
架构Ubuntu 系统中运行 32 位可执行文件,您必须添加架构,还必须安装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
Run Code Online (Sandbox Code Playgroud)
jtp*_*yda 12
为了扩展@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
Run Code Online (Sandbox Code Playgroud)
通知interpreter /lib64/ld-lsb-x86-64.so.3
;如果此文件不存在,则需要安装它。对于 16.04 上的这个特定加载器,答案是sudo apt-get install lsb
.
脚本加载器的问题(请参阅此答案)。
ldd <file-name>
检查任何“未找到”的库。有关更多信息,请参阅此答案。加载程序不存在可能是由于 32/64 位不匹配或其他一些原因。可能还有我不知道的其他类型的加载器错误。
这是一个成绩单,显示了更多关于问题的性质,以及如何从 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
Run Code Online (Sandbox Code Playgroud)
一旦你安装了 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
Run Code Online (Sandbox Code Playgroud)
要完成这项工作,您可能需要一次确定并安装一个额外的库...
$ sudo apt-get install libstdc++6:i386 ## may require various additional libs
$ ./myprogram
... works correctly ...
Run Code Online (Sandbox Code Playgroud)
我不知道是否有系统的方法来识别要安装的正确库。有一些猜测将错误消息映射到包名称(选项卡完成帮助)。
归档时间: |
|
查看次数: |
850895 次 |
最近记录: |