错误:无法执行二进制文件:./filename

我无法在 Ubuntu 11.10 32 位操作系统上执行编译好的 Fortran 代码。
错误信息为:
bash: ./filename : Cannot execute binary file.

我已经安装了gcc和gfortran库。
有人可以帮忙吗?
$ file um
um: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped 

7请键入 file 文件名 并报告结果。 - January
文件名是um.exe,结果是bash:./um无法执行二进制文件。 - user87654
2这看起来不像是一个本地的Linux程序。尝试使用Wine。 - Lekensteyn
这个可执行文件是使用一个编译器生成的,该编译器能够编译一组Fortran代码。这个可执行文件是在Fedora机器上创建的。 - user87654
1请键入file um.exefile um(根据您的二进制文件的名称)。然而,很可能生成的二进制文件是为某种原因而设计的Windows二进制文件。此外,如果该程序是公开的,您可以发布源代码的链接。或者在这里发布makefile。 - January
输出是:um: ELF 64位LSB可执行文件,x86-64架构,版本1(SYSV),动态链接(使用共享库),适用于GNU/Linux 2.6.9,未剥离 - user87654
7个回答

从你在评论中发布的file um的输出可以看出,你的二进制文件是一个64位的二进制文件。
32位系统无法运行64位的二进制文件,只能反过来运行。

3这是我见过的最常见的问题原因,使用file可以很快地识别出来。 - mikebabcock
那么这个问题就没有解决办法了吗? - JohnMerlino
@JohnMerlino 要么提供具有正确指令集和能够运行它的操作系统的硬件(AMD64 硬件和用于 AMD64 程序的操作系统),要么模拟/仿真/虚拟化它(Virtual Box/JVM/...),或者获取适用于你的指令集的版本。你不能将其他指令集的软件作为本机程序运行。 - 12431234123412341234123

另外一个解决方法是针对那些遇到这个问题但不涉及未匹配字节的人,可以在运行文件时去除"bash"命令。只需使用chmod +x '文件路径',然后在终端中运行'文件路径'。这就是我解决问题的方法。

对于谷歌员工:

  • 32位还是64位?用file yourbinary检查一下
  • 有执行权限吗?用chmod +x yourbinary来做
  • 路径正确吗?用./yourbinary试试

尝试将文件设为可执行状态
chmod +x um.exe

然后尝试运行它。
./um.exe

但如果这是一个为Windows编译的exe文件,您可能需要安装Wine。


另一个可能导致此错误的原因是:尝试在Mac上运行Linux二进制可执行文件,或者反过来。

例如,尝试在我将其传输到的Ubuntu机器上运行我的Mac上的true二进制文件:

$ ./mactrue 
-bash: ./mactrue: cannot execute binary file: Exec format error

如果您下载了一个二进制文件并且在执行时出现此错误,请检查是否下载了错误操作系统的版本。

对我来说,在我的 Mac 上将二进制文件复制到“应用程序”目录,然后再复制到我的路径中会导致问题。我相当确定,“应用程序”文件夹把二进制文件变成了一个别名而不是实际的二进制文件。
-bash: /usr/local/bin/terraform: cannot execute binary file
mike$ file /usr/local/bin/terraform 
/usr/local/bin/terraform: MacOS Alias file

我再次从我的下载文件夹中解压了二进制文件,然后将其使用mv命令移动到了我的路径中,结果运行良好。
mike$ file /usr/local/bin/terraform
/usr/local/bin/terraform: Mach-O 64-bit executable x86_64

对我来说,我在一个Vagrant(VirtualBox)虚拟机中工作,但是已经拔掉了存储VM镜像的便携式硬盘 - 我插入了硬盘并重新启动了VM,我的二进制文件又可以执行了。
我想VM的大部分已经加载到内存中,因为我仍然可以使用它并执行系统二进制文件。