我在Windows Linux子系统下工作,该操作系统在其他计算机上也能很好地工作。
我有一个64位文件:./ensembles.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
uname -m
:x86_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
答案 0 :(得分:1)
可重定位的ELF 64位LSB类型的文件是ELF类型ET_REL的文件,不能直接执行。通常称为目标文件或.o
文件,它是链接编辑器的输入文件。
您需要将其链接(使用gcc
或ld
命令)以生成可执行文件。如果您正在调用gcc
,则不得传递-r
或-c
之类的选项,否则GCC不会生成可执行文件。
在您引用的makefile中,make将仅执行第一个目标,因为它是默认目标。尝试将main
的规则移至文件开头,或添加规则
all: main
开头。您还可以调用make main
来请求显式构建main
文件。