7

我有一个二进制可执行文件,它是我下载的学术软件包的一部分。我似乎无法让它运行,而且我无权访问源代码。我已经尝试了以下事情。有什么想法吗?

非常感谢。

$ 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
4

2 回答 2

1

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

$ ~/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 映像(或 xen 等 VM,如果您的 CPU 支持它)。

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

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

于 2015-03-24T15:43:03.187 回答
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 系统来运行它。

于 2013-08-02T18:20:32.950 回答