尝试运行使用 gcc 编译的目标文件时,出现此错误cannot execute binary file: Exec format error
。我不知道该怎么办,所以我在 Google 上搜索。
这问题出现在结果的第一部分,最后会有一个家伙打印这个命令的输出,以尝试找到解决方案
/usr/bin/file -L $(/usr/bin/which ls)
这得到相同的输出就像我的电脑一样。甚至版本 ID。一切。
从我读到的内容来看,这意味着我们正在使用完全相同的程序,对吗?如果是这样,那意味着什么?这是否意味着他只是下载了.iso
与我相同的文件?或者有人重写了自定义ls
文件并安装在我的电脑上?该帖子的最后一条消息来自 2016 年 7 月 13 日,我猜 ubuntu 一定在那时对其 iso 进行了更改(我认为),因此更改了构建 ID。
我需要有人告诉我这里发生了什么......我的电脑和网络可能受到了损害,所以请不要丢弃任何东西。
答案1
问题没有包含完整的错误消息。特别是它没有提到哪个文件无法执行。
在这种情况下,这似乎不太可能$(/usr/bin/which ls)
是命令的正确命令行参数。如果对无法执行的文件(由于缺少完整的错误消息,因此问题中不存在其名称)调用该命令,则命令的输出更有可能提供相关信息。如果您对相关文件调用该命令,其输出可能会提供一些见解。其他可能相关的信息包括您正在使用的编译器版本以及(也许更重要的是)您如何调用它。file
file
file
获取问题中摘录的错误消息的一种简单方法是调用gcc
并-c
尝试调用它生成的目标文件(这可能需要使用为其添加执行权限chmod
)。 在这种情况下,命令的输出file
可能如下所示:
test.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
如果使用如下命令将该目标文件链接到系统库,则gcc -o test test.o
该命令的输出file
可能更像这样:
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=9c069b3da39bd98ef3e72ba070286936c7807ead, not stripped
简而言之,问题措辞含糊,并不排除您试图调用可重定位目标文件而不是调用链接器生成的可执行文件的可能性。如果不是这种情况,您应该编辑问题以更具体地说明您正在尝试做什么。
关于匹配的 BuildID,是的,这意味着在您链接的论坛中提问的人恰好拥有ls
与您相同的二进制文件,但这与不相关文件(例如您使用 gcc 编译的文件)上的 Exec 格式错误问题完全无关。