Jak skompilować Windows na Linuksie z gcc / g++?

Napisałem kilka efektów w C++ (g++) używając freeglut na Linuksie i kompiluję je za pomocą

g++ -Wall -lglut part8.cpp -o part8

Więc zastanawiałem się, czy jest możliwe, aby g++ robił statyczne skompilowane pliki wykonywalne Windows, które zawierają wszystko, co potrzebne?

Nie mam Windowsa, więc byłoby super, gdybym mógł to zrobić na Linuksie:)

Author: Rakete1111, 2010-01-09

7 answers

Mingw32 istnieje jako pakiet dla Linuksa. Można kompilować krzyżowo i łączyć z nim aplikacje systemu Windows. Jest tutorial tutaj na Forum Code:: Blocks . Należy pamiętać, że polecenie zmienia się na x86_64-w64-mingw32-gcc-win32, na przykład.

Ubuntu, na przykład, ma MinGW w swoich repozytoriach:

$ apt-cache search mingw
[...]
g++-mingw-w64 - GNU C++ compiler for MinGW-w64
gcc-mingw-w64 - GNU C compiler for MinGW-w64
mingw-w64 - Development environment targeting 32- and 64-bit Windows
[...]
 103
Author: AndiDog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-08 20:43:21

Jedną z opcji kompilacji dla Windows w Linuksie jest MinGW. Znalazłem bardzo pomocny tutorial tutaj .

Aby zainstalować mingw32 na systemach opartych na Debianie, uruchom następujące polecenie:
sudo apt-get install mingw32

Aby skompilować kod, możesz użyć czegoś w rodzaju:
i586-mingw32msvc-g++ -o myApp.exe myApp.cpp

Czasami będziesz chciał przetestować nową aplikację Windows bezpośrednio w Linuksie. Można do tego używać wina, chociaż zawsze należy pamiętać, że wino może mieć błędy. Oznacza to, że możesz nie być pewien że błąd jest w wine, twoim programie lub obu, więc używaj tylko wine do testów ogólnych.

Aby zainstalować wine, Uruchom:
sudo apt-get install wine

 31
Author: aggregate1166877,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-05 08:45:45

Sugerowana metoda dała mi błąd na Ubuntu 16.04: E: nie można zlokalizować pakietu mingw32

===========================================================================

Aby zainstalować ten pakiet na Ubuntu, użyj następującego polecenia:

sudo apt-get install mingw-w64

Po zainstalowaniu można go używać:

x86_64-w64-mingw32-g++

Uwaga!

Dla 64-bitowego użycia: x86_64-W64-mingw32-g++

Dla 32-bitowego zastosowania: i686-W64-mingw32-g++

 23
Author: 0x8BADF00D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-08 19:32:28

Zainstaluj kompilator krzyżowy, taki jak mingw64 z menedżera pakietów. Następnie skompiluj w następujący sposób: zamiast wywoływać gcc wywołaj i686-w64-mingw32-gcc dla 32-bitowych okien lub x86_64-w64-mingw32-gcc" dla 64-bitowych okien. Użyłbym również opcji --static, ponieważ docelowy system może nie mieć wszystkich bibliotek.

Jeśli chcesz skompilować inny język, jak Fortran, zamień -gcc na -gfortran w poprzednich poleceniach.

 14
Author: Pedro Miranda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-16 22:14:24

Używałem mingw na Linuksie do tworzenia plików wykonywalnych Windows w C, podejrzewam, że C++ również by działał.

Mam projekt, ELLCC, który pakuje clang i inne rzeczy jako cross compiler tool chain. Używam go do kompilacji clang( C++), binutils i GDB Dla Windows. Kliknij link do pobrania na stronie ellcc.org dla wstępnie skompilowanych binariów dla kilku hostów Linuksa.

 8
Author: Richard Pennington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-03 17:56:10

From: https://fedoraproject.org/wiki/MinGW/Tutorial

Począwszy od Fedory 17 możliwe jest łatwe budowanie (cross-compile) binariów dla celów win32 i win64. Jest to realizowane za pomocą łańcucha narzędzi mingw-w64: http://mingw-w64.sf.net / . za pomocą tego zestawu narzędzi można budować binaria dla następujących języków programowania: C, C++, Objective-C, Objective-C++ oraz Fortran.

" porady i wskazówki dotyczące korzystania z kompilatora krzyżowego Windows": https://fedoraproject.org/wiki/MinGW/Tips

 5
Author: iljau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-23 03:37:07

Dla Fedory:

# Fedora 18 or greater
sudo dnf group install "MinGW cross-compiler"

# Or (not recommended, because of its deprecation)
sudo yum groupinstall -y "MinGW cross-compiler"
 4
Author: scavenger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-05 23:24:17