无法执行二进制文件:Exec格式错误64位

时间:2018-10-03 08:07:54

标签: bash gcc binaryfiles windows-subsystem-for-linux

我在Windows Linux子系统下工作,该操作系统在其他计算机上也能很好地工作。

我有一个64位文件:./ensembles.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

uname -mx86_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) {
}

错误:-bash: ./ensembles.o: cannot execute binary file: Exec format error

我的Makefile:

ensembles.o : ensembles.c sac.h type_ensemble.h operations_ens.h
    gcc -c ensembles.c
operation_ens.o : operations_ens.c operations_ens.h
    gcc -c operations_ens.c
sac.o : sac.c sac.h
    gcc -c sac.c
main: ensembles.o operation_ens.o sac.o
    gcc -o main ensembles.o operation_ens.o sac.o

1 个答案:

答案 0 :(得分:1)

可重定位的ELF 64位LSB类型的文件是ELF类型ET_REL的文件,不能直接执行。通常称为目标文件或.o文件,它是链接编辑器的输入文件。

您需要将其链接(使用gccld命令)以生成可执行文件。如果您正在调用gcc,则不得传递-r-c之类的选项,否则GCC不会生成可执行文件。

在您引用的makefile中,make将仅执行第一个目标,因为它是默认目标。尝试将main的规则移至文件开头,或添加规则

all: main

开头。您还可以调用make main来请求显式构建main文件。