【问题标题】:cannot execute binary file无法执行二进制文件
【发布时间】:2013-08-04 02:54:40
【问题描述】:

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

非常感谢。

$ 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

【问题讨论】:

    标签: binary executable ldd


    【解决方案1】:

    注意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 位的,但我很乐意确认一下。
    • 哦..等等。现在我看到你使用了uname -m,它返回它确实是一个 64 位系统:x86_64。你确定你在 random_cell 上设置了执行位吗?它是否归您的用户所有?
    • 我有理由确定我已经设置了执行位 - $ ls -l random_cell -rwxr-xr-x@ 1 hippo staff 1048235 Jul 24 2012 random_cell
    • 嗯。您是否尝试过启动另一个 shell 来执行它?喜欢sh random_cell
    • 嗯.. 所以你在 MAC 上。我以为你使用的是 Linux。也许这就是问题所在……如果这个二进制文件用于 64 位 Linux,它可能无法在 MAC 上运行(如果我没记错的话,MAC OS 内核基于 BSD unix)。好吧,我可能对它们的二进制不兼容程度有误,但你应该检查一下,这可能是它对你不起作用的原因(参见file 回复:for GNU/Linux 2.6.4)。
    【解决方案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(如果可以的话)-Download Ubuntu Desktop

    在 32 位 Linux 上运行 64 位代码的一种替代方法是使用真正的 cpu 仿真器,例如 qemu/bochs - Bochs - OSDev Wiki - 带有 64 位 Linux 映像(如果您的 CPU 支持,也可以使用类似 xen 的 VM) .

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 2013-02-20
      相关资源
      最近更新 更多