Gcc скомпилированные двоичные файлы дают "невозможно выполнить двоичный файл",

Я скомпилирую эту программу:

#include <stdio.h>

int main()
{
    printf("Hello World!");
    return 0;
}

С помощью этой команды:

  gcc -c "hello.c" -o hello

И когда я пытаюсь выполнить привет, я получаю

bash: ./hello: Permission denied

Поскольку разрешения

-rw-r--r-- 1 nathan nathan   856 2010-09-17 23:49 hello

Почему-то???

Но что бы ни... после изменения разрешений и попыток выполнить снова, я получаю

bash: ./hello: cannot execute binary file

Я использую gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3

Что я здесь делаю неправильно? Это должно быть очевидно... мне слишком поздно, чтобы я продолжал использовать усталые глаза, чтобы попытаться выяснить эту простую проблему....

P.S. Я (иногда) работаю над более сложными программами, чем Hello World, но gcc делает это по всем направлениям...

Ответы

Ответ 1

Возьмите -c. Это для создания объектных файлов, а не исполняемых файлов.

Ответ 2

Флаг -c указывает, что он не связан, поэтому у вас есть объектный файл, а не бинарный исполняемый файл.

Фактически, если вы запустили это без флага -o, вы увидите, что выходной файл по умолчанию будет hello.o.

Для справки (и хихиканья) запись человека на флаге -c:

-c  Compile or assemble the source files, but do not link.  The linking stage simply is not done.
    The ultimate output is in the form of an object file for each source file.

    By default, the object file name for a source file is made by replacing the suffix .c, .i, .s,
    etc., with .o.

    Unrecognized input files, not requiring compilation or assembly, are ignored.

Ответ 3

Скомпилировать с помощью: gcc hello.c -o hello