./abc.o: невозможно выполнить двоичный файл: Exe c ошибка формата - PullRequest
0 голосов
/ 09 марта 2020

У меня есть Linux Виртуальная машина. Есть некоторая информация.

uname -a: Linux 05d57a817610 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

cat /proc/version: Linux version 4.4.0-131-generic (buildd@lgw01-amd64-015) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018

cat /etc/issue: Ubuntu 18.04.2 LTS \n \l

/*abc.c*/
#include<stdio.h>
int main(){

    printf("Hello World\n");
    return 0;
}

Я использовал команду gcc abc.c -o abc.o, затем получил файл: abc.o. Это был исполняемый файл.

Когда я использовал команду: gcc abc.c -c, он выдал файл abc.o. Затем я попытался использовать команду: ./abc.o, но она показала, что bash: ./abc.o: Permission denied. При этом я использовал команду chmod +x abc.o, затем я использовал команду ./abc.o, она показала, что ./abc.o: cannot execute binary file: Exec format error. Я долго беспокоился об этой проблеме, я не знал почему. Может кто-нибудь мне помочь? Заранее спасибо. Извините за мой бедный Энгли sh.

Есть некоторая информация, которую вы, возможно, захотите узнать, когда решите проблему.

file abc.o: abc.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

uname -m: x86_64

Если вы хотите узнать какую-либо информацию, пожалуйста, оставьте сообщение в комментарии. Большое спасибо.

1 Ответ

5 голосов
/ 09 марта 2020

gcc -c создает объектный файл, не исполняемый файл. Чтобы создать исполняемый файл, вам нужно связать объектный файл:

gcc abc.c -c
gcc abc.o -o abc

В качестве ярлыка вы можете скомпилировать исходный файл во временный объектный файл и связать этот объект файл в исполняемый файл также с помощью одной команды:

gcc abc.c -o abc

gcc используется как для компиляции, так и для компоновки (это интерфейсный инструмент, который при необходимости вызывает компилятор или компоновщик).

...