2016-08-05 20 views
18

Windows 10 Anniversary Update zawiera Podsystem Linux dla Ubuntu. Zainstalowałem gcc z sudo apt-get install gcc.Jak skompilować plik wykonywalny dla systemu Windows z GCC z podsystemem Linux?

pisałem jakiś prosty kod C dla celów testowych:

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

i skompilowane go z gcc -c main.c ale wykonanie (tylko Linux) main.o jest generowany. Jeśli uruchomię to ./main.o, wyświetli się Hello.

Moje pytanie brzmi: jak mogę skompilować main.c, aby system Windows mógł go uruchomić? Zasadniczo, w jaki sposób można wygenerować plik *.exe z GCC w podsystemie Linux?

+1

'skompilować Windows exe' ... nie są one już wykonywalne? –

+2

Twoje pytanie jest (przynajmniej dla mnie) nieco niejasne. Czy możesz podać więcej informacji określających, dlaczego to, co dostajesz, różni się od tego, czego się spodziewałeś. Zauważ również, że przekazując opcję '-c' do kompilatora, wyraźnie mówisz, aby wykonywał tylko krok kompilacji - i * nie * tworzy plik wykonywalny przez łączenie. –

+0

@ G.M. Jeśli chcę uzyskać plik '* .exe', powinienem po prostu utworzyć' gcc -o main.exe main.c'? Faktem jest, że kiedy to robię i próbuję uruchomić ten plik wyjściowy 'main.exe' mam to http://i.imgur.com/NUDCslM.jpg – Mikhail

Odpowiedz

34

Podsystem Linux działa jako komputer Linux. Możesz uruchamiać tylko pliki wykonywalne Linuksa i domyślnie gcc tworzy pliki wykonywalne Linux.

Aby utworzyć pliki wykonywalne systemu Windows, należy zainstalować MinGW cross-kompilatora:

sudo apt-get install mingw-w64 

Następnie można utworzyć 32-bitowy system Windows wykonywalny z:

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

i 64-bitowych systemach Windows wykonywalnego z :

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

Należy pamiętać, że te pliki wykonywalne systemu Windows nie będą działać w systemie Linux Subsyste m, tylko poza nim.

+0

Strona podręcznika gcc wydaje się sugerować, że jest kilka opcji tworzenia konsoli Windows i okien exe.Czy istnieje jakiś powód, dla którego nie będą działać? -mconsole -mwindows –

+0

Nie mam dużego doświadczenia w tworzeniu aplikacji dla systemu Windows, więc nie znam szczegółów tych opcji kompilatora. Mimo to opcje specyficzne dla systemu Windows będą działać tylko z kompilatorami * -mingw32-gcc, a nie domyślnym gcc, który tworzy pliki wykonywalne systemu Linux. –

+0

Wygląda na to, że x86_64-w64-mingw32-gcc został zmieniony w taki sposób, że jest przeznaczony do używania środowiska wykonawczego Windows C (MSVCRT.DLL) i innych podstawowych bibliotek systemu Windows zamiast standardowych łączy Cc gcc (przypuszczalnie czym jest in/lib?). –

4

Jeśli skompilować za pomocą gcc na linux będzie produkować pliku ELF nie PE (co okna zrozumieć) plik

Aby skompilować program dla Windows pod Linuksem można wykorzystać MinGW.