当我运行命令时
./program
我收到错误:
bash: ./program: cannot execute binary file: Exec format error
当我跑步时uname -a
我得到:
4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:34:49 UTC 2016 i686 i686 i686 GNU/Linux
我还检查了有关我尝试运行的程序的信息,我得到:
ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=c154cb3d21f6bbd505d165aed3aa6ed682729441, not stripped
/proc/cpuinfo
节目
flags : fpuvme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts
我怎样才能运行该程序?
答案1
您有一个 64 位 x86 CPU(由lm
中的标志指示/proc/cpuinfo
),但运行的是 32 位内核。您尝试运行的程序需要 64 位运行时,因此它无法按原样运行:即使在 64 位 CPU 上,32 位内核也无法运行 64 位程序。
如果您可以找到该程序的 32 位版本(或自己构建),请使用它。
或者,您可以安装 64 位内核,重新启动,然后安装程序所需的 64 位库。
要安装 64 位内核,请运行
sudo dpkg --add-architecture amd64
sudo apt-get update
sudo apt-get install linux-image-generic:amd64
这将安装最新的 64 位 Xenial 内核以及各种支持 64 位的软件包。重新启动后,您应该会发现uname -a
显示x86_64
而不是i686
。如果您尝试再次运行您的程序,它可能会正常工作,或者您会因缺少库而收到错误消息;在后一种情况下,安装相应的软件包(用于apt-file
查找它们)以使程序正常运行。
答案2
我在 Ubuntu Server 上遇到了同样的问题并收到以下错误:
-bash: /usr/bin/my-script: cannot execute binary file: Exec format error
我找到了在arm CPU上运行x86-64文件的通用解决方案。运行以下代码修复了它:
sudo apt update
sudo apt install -y qemu-user-static binfmt-support
sudo dpkg --add-architecture amd64
sudo apt update
sudo apt install libc6:amd64
答案3
您有一个 32 位 CPU (x86),并尝试运行 64 位可执行文件 (x86_64)。您无法在该 CPU 上运行该可执行文件。要么找到 32 位版本,要么自己编译源代码。