Bash 无法执行二进制文件:Exec格式错误64位
我在Windows Linux子系统下工作,该子系统在其他计算机上运行良好 我有一个64位文件:Bash 无法执行二进制文件:Exec格式错误64位,bash,gcc,binaryfiles,windows-subsystem-for-linux,Bash,Gcc,Binaryfiles,Windows Subsystem For Linux,我在Windows Linux子系统下工作,该子系统在其他计算机上运行良好 我有一个64位文件:/ensembles.o:ELF 64位LSB可重定位,x86-64,版本1(SYSV),未剥离 uname-m:x86\u 64 我试过使用gcc编译器和clang编译器,两者都是松散的 即使这个C代码也不起作用: #include <stdio.h> #include <stdlib.h> #include "sac.h" #include "type_ensemble.
/ensembles.o:ELF 64位LSB可重定位,x86-64,版本1(SYSV),未剥离
uname-m
:x86\u 64
我试过使用gcc
编译器和clang
编译器,两者都是松散的
即使这个C代码也不起作用:
#include <stdio.h>
#include <stdlib.h>
#include "sac.h"
#include "type_ensemble.h"
#include "operations_ens.h"
int main(int argc, char ** argv) {
}
ELF 64位LSB relocatable类型的文件是ELF类型ET_REL的文件,不能直接执行。它通常称为对象文件或.o
文件,是链接编辑器的输入文件
您需要将其链接(使用gcc
或ld
命令)以生成可执行文件。如果调用的是gcc
,则不得传递-r
或-c
等选项,否则gcc将不会生成可执行文件
在您引用的makefile中,make只执行第一个目标,因为它是默认目标。尝试将main
的规则移动到文件的开头,或添加规则
all: main
一开始。您还可以调用
makemain
来请求显式地构建main
文件。您说过您尝试过,但您到底尝试了什么?你说的“松散”是什么意思?我试着执行编译过的程序/ensembles.o
。我的意思是不能编译它以便运行。ensembles.o
不是一个编译程序,它是一个对象文件。你到底对gcc和clang做了什么?您的问题说您(不知怎么地)使用了它们,但您的评论说您只是运行了/ensembles.o
,这两者都不涉及。好的,所以您需要生成main
并运行/main
。为什么要执行中间对象文件?我现在明白了,但如何链接我的所有对象文件?@Iziogcc-o main-ensembles.o operation_en.o sac.o
,生成文件的最后一行。@lzio您的可执行文件名为main
,但它不是因为您编写生成文件的方式而生成的。
all: main