Как скомпилировать исполняемый файл для Windows с GCC с подсистемой Linux?

Обновление для Windows 10 Anniversary включает подсистему Linux для Ubuntu. Я установил gcc с sudo apt-get install gcc.

Я написал простой C-код для тестирования:

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

И скомпилировал его с помощью gcc -c main.c, но сгенерирован execute (только для Linux) main.o. Если я запустил его ./main.o, он отобразит Hello.

Мой вопрос в том, как я могу скомпилировать main.c, чтобы Windows могла запускать его? В принципе, как вы создаете файл *.exe с GCC в подсистеме Linux?

Ответы

Ответ 1

Подсистема Linux работает как Linux-компьютер. Вы можете запускать исполняемые файлы Linux внутри него, а по умолчанию gcc создает исполняемые файлы Linux.

Чтобы создать исполняемые файлы Windows, вам необходимо установить кросс-компилятор mingw:

sudo apt-get install mingw-w64

Затем вы можете создать 32-разрядный исполняемый файл Windows с помощью:

i686-w64-mingw32-gcc -o main32.exe main.c

И 64-разрядная версия Windows:

x86_64-w64-mingw32-gcc -o main64.exe main.c

Обратите внимание, что эти исполняемые файлы Windows не будут работать внутри подсистемы Linux, только за ее пределами.

Ответ 2

Если вы скомпилируете gcc на linux, он создаст файл ELF, а не файл PE (какие окна понимают)

Чтобы скомпилировать программу для windows внутри linux, вы можете использовать mingw.