Конвертировать .o файл в .exe - PullRequest
11 голосов
/ 10 мая 2010

Можно ли преобразовать объектный файл .o, созданный из исходного кода .c, в .exe? И если это возможно, есть ли прямая команда, использующая gcc?

Ответы [ 2 ]

22 голосов
/ 10 мая 2010
gcc foo.o -o foo.exe
9 голосов
/ 10 мая 2010

Преобразование .o в .exe возможно, в зависимости от содержимого .o. .o должен удовлетворять требованиям .exe. Одним из них является main функция.

Я обычно делю проекты на части по темам. Каждый кусок переведен в .o файл. Отдельная часть не может быть преобразована в .exe, но все объединенные части могут быть преобразованы.

Например, если я скомпилирую следующий файл, он превратится в .o файл:
{hello.c}

#include <stdio.h>

void Hello()
{
  puts("Hello");
  return;
}

Далее я компилирую:

gcc -c hello.c -o hello.o

Это создаст файл hello.o. Его нельзя преобразовать в файл .exe, так как он не имеет функции запуска. Это просто информация.

Однако следующий текст можно преобразовать из .o в .exe:
{main.c}

#include <stdio.h>
int main(void)
{
  puts("Hello from main.\n");
  return 0;
}

Создать файл .o:

  gcc -c -o main.o main.c

И поскольку он имеет точку входа, называемую main по определению языка, main.o можно преобразовать в .exe:

  gcc -o main.exe main.o

Таким образом, некоторые .o файлы могут быть преобразованы в .exe, а другие нет. В языках C и C ++ файл .o должен иметь функцию main, чтобы стать исполняемым файлом .exe. Примечание. Спецификации языка C и C ++ не требуют перевода в .o файлы перед созданием исполняемого файла.

...