невозможно выполнить двоичный файл: ошибка формата Exec 64 бит - PullRequest
0 голосов
/ 03 октября 2018

Я нахожусь под Windows Linux Subsystem, которая хорошо работает на другом компьютере.

У меня есть 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

1 Ответ

0 голосов
/ 03 октября 2018

Файл типа ELF 64-битный LSB, перемещаемый - это файл типа ELF ET_REL, который непосредственно не исполняется.Обычно он называется объектным файлом или .o файлом и является входным файлом для редактора ссылок.

Вам необходимо связать его (либо с помощью команды gcc, либо ld), чтобы создатьисполняемый файлЕсли вы вызываете gcc, вы не должны передавать такие параметры, как -r или -c, иначе GCC не создаст исполняемый файл.

В указанном вами файле makefile будет выполнена только первая цельmake, потому что это цель по умолчанию.Попробуйте переместить правило для main в начало файла или добавьте правило

all: main

в начале.Вы также можете вызвать make main для явного запроса на создание файла main.

...