无法执行二进制文件

8

我下载了一个学术软件包,其中包含一个二进制可执行文件。我无法运行它,并且我没有访问源代码的权限。我已经尝试了以下几个方案。有什么想法吗?

非常感谢。

$ chmod +x random_cell
$ ./random_cell
-bash: ./random_cell: cannot execute binary file
$ file random_cell
random_cell: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped
$ ldd random_cell
random_cell: is not an object file
$ uname -m
x86_64
2个回答

2

我遇到了同样的问题,这是我想出的答案。

$ ~/opt/Linux-3.11.0-i686/svn/bin/svn --version
-bash: /home/fennellb/opt/Linux-3.11.0-i686/svn/bin/svn: cannot execute binary file

$ file ~/opt/Linux-3.11.0-i686/svn/bin/svn
/home/fennellb/opt/Linux-3.11.0-i686/svn/bin/svn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, BuildID[sha1]=0x6b38ac5ac15af4334712b9bacc6646cabaefde9a, not stripped

$ find /bin /usr/bin -maxdepth 1 -type f -print0 | 
        xargs -0 file | 
        awk 'BEGIN           {c32=0;c64=0} 
             /ELF 64-bit/    {c64++} 
             /ELF 32-bit/    {c32++} 
             END             {print "ELF 32-bit count "c32; 
                              print "ELF 64-bit count "c64}'

ELF 32-bit count 1639
ELF 64-bit count 0

好的...这就解释了一切!

可能的解决方案:检查您的CPU是否支持64位Linux:

$ cat /proc/cpuinfo  | egrep '^(model name|cpu MH|vend)'
cpu MHz         : 1200.000
model name      : Intel(R) Pentium(R) Dual  CPU  E2140  @ 1.60GHz
vendor_id       : GenuineIntel

然后搜索确切的CPU名称以查找其规格。

然后升级到64位Linux(如果可以)- 下载Ubuntu桌面版

在32位Linux上运行64位代码的另一种选择是使用真正的CPU仿真器,例如qemu / bochs - Bochs - OSDev Wiki - 使用64位Linux映像(或VM,如xen,如果您的CPU支持)。

另一种方法是要求您的软件提供商重新编译为32位。

(对于我来说,我将从源代码重新编译。)


0
请注意您的file命令的输出:
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked 
(uses shared libs), for GNU/Linux 2.6.4, not stripped

这意味着你试图运行的可执行文件是为x86-64架构编译的。如果你使用的是32位操作系统,那么它将无法运行,除非你重新编译为32位。

由于你没有源代码,我猜更简单的解决方案是使用64位Linux系统来运行它。


我如何判断我是否在运行32位操作系统?我认为我应该在64位上,但我很乐意检查以确保。 - user1473883
哦...等等。现在我看到你使用了 uname -m 命令,并且返回是一个64位系统:x86_64。你确定已经设置了 random_cell 的可执行权限吗?它是被你的用户所拥有吗? - Claudio
嗯,你尝试过在另一个 shell 中执行它吗?比如 sh random_cell - Claudio
哦,你的声望还不足以进入聊天室。尝试运行 strace random_cell。它应该会输出大量信息,但它将显示所有系统调用发生的情况,直到执行最终失败,因此我们肯定会得到一些线索。 - Claudio
2
哦,原来你在使用MAC。我本以为你在使用Linux。也许这就是问题所在...如果二进制文件是为64位Linux而设计的,那么它可能无法在MAC上运行(如果我没有记错的话,MAC OS内核是基于BSD Unix的)。好吧,我可能对二进制兼容性有些错误,但你应该检查一下,这很可能是它不能在你的机器上运行的原因(请查看“file”响应:“for GNU /linux 2.6.4”)。 - Claudio
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接