Моя C программа не запускается с `не может выполнить двоичный файл: ошибка формата Exec`

Я только начинаю с C. Я пытаюсь скомпилировать приведенный ниже код и выполнить его, но я получаю ошибку.

Также работает size ничего не показывает в БС или стеках данных?

#include<stdio.h>
/* test.c:  My first C program on a Linux */
int main(void)
{
 printf("Hello! This is a test prgoram.\n");
 return 0;
}

Компиляционные работы:

gcc -c test.c -o test

Выполнение:

bash: ./test: cannot execute binary file: Exec format error

Размер:

  text     data     bss     dec     hex filename
    108       0       0     108      6c test

3 ответа

Решение

Хорошо, так как никто не хочет сказать, почему... вам нужно удалить опцию -c, потому что в соответствии с человеком:

опция -c говорит не запускать компоновщик. Затем вывод состоит из объектных файлов, выводимых ассемблером.

В общем, вы создаете не полностью исполняемый файл, а просто объектные файлы.

Вот краткая информация о том, как работает компиляция: http://courses.cms.caltech.edu/cs11/material/c/mike/misc/compiling_c.html

-c флаг не является правильным в этом случае:

gcc test.c -o test

-c Эта опция используется для компиляции программы.

Использование gcc test.c -o test а потом ./test,

-c используется для компиляции программы (для создания объектного файла без ссылок)
-o используется для компиляции и компоновки программы (для создания исполняемого файла) и сохранения полученного исполняемого файла в указанном выходном файле

например gcc test.c -o test компилирует test.c и после компоновки создает исполняемый файл с именем test (как указано после флага -o)

Без флага -o gcc компилирует и создает ссылки для создания исполняемого файла a.out(по умолчанию) например gcc test.c создаст a.out который вы можете выполнить как ./a.out

Увидеть man gcc Больше подробностей.

Другие вопросы по тегам