注册

Linux报 “cannot execute binary file” 异常的原因以及解决办法

Linux报 cannot execute binary file(无法执行二进制文件)这个错误通常意味着二进制文件的格式不符合当前的操作系统或体系结构。比如,试图在64位Linux操作系统上执行32位的可执行文件时,就会出现这种错误。下面我将详细讲解其原因与解决办法,并提供示例说明。

原因

  1. 可执行文件不是针对当前的操作系统和体系结构编译的。

  2. 没有运行可执行文件的权限,可以使用 chmod 命令赋予可执行权限。

  3. 可执行文件的依赖项缺失,需要安装相关的依赖库。

  4. 可执行文件被损坏,需要重新下载或重新编译。

解决办法

  1. 检查操作系统和体系结构是否与可执行文件匹配。可以使用 file 命令查看文件类型以及位数。例如:

$ file myprogram
myprogram: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=..., not stripped

  1. 赋予可执行权限。可以使用 chmod +x 命令赋予可执行权限。例如:

$ chmod +x myprogram

  1. 安装依赖库。可以使用系统包管理器安装相关的依赖库。例如,在Ubuntu系统上,可以使用 apt-get 命令安装依赖库。例如:

$ sudo apt-get install libfoo

  1. 重新下载或重新编译可执行文件。

示例

实验环境:

  • 操作系统:Ubuntu 20.04
  • 可执行文件:hello,C语言编写,未编译
  • 错误信息:cannot execute binary file

步骤:

  1. 下载hello程序:

$ wget https://raw.githubusercontent.com/tmt514/hello/main/hello.c

  1. 编译hello程序:

$ gcc hello.c -o hello

  1. 执行hello程序:

$ ./hello
Hello, world!

  1. 重新编译hello程序,生成32位可执行文件:

$ gcc -m32 hello.c -o hello

  1. 错误执行32位可执行文件:

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

  1. 修改hello程序的权限:

$ chmod +x hello

  1. 再次执行hello程序:

$ ./hello
Hello, world!

通过以上步骤,我们成功解决了无法执行32位可执行文件的问题。