Моя 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
Больше подробностей.