Wie kompiliere ich für Windows unter Linux mit gcc / g ++?

119

Ich habe einige Effekte in C ++ (g ++) mit freeglut unter Linux geschrieben und kompiliere sie mit

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

Ich habe mich also gefragt, ob es möglich ist, dass g ++ statisch kompilierte ausführbare Windows-Dateien erstellt, die alles Notwendige enthalten.

Ich habe kein Windows, also wäre es wirklich cool, wenn ich das unter Linux machen könnte :)

Louise
quelle
4
@AndiDog, "Erste Dosis kostenlos", richtig. Es ist jedoch nicht erforderlich, einen automatisierten Erstellungsprozess auf einem Windows-Computer einzurichten, während Sie einen abgeschlossenen und funktionierenden für Linux haben.
P Shved
Wie würden Sie Ihre Windows-Software ohne Windows testen? Wein verwenden?
el.pescado
7
@ el.pescado, Erstellen und Testen sind völlig unterschiedliche Aufgaben. Windows ist für erstere nicht erforderlich.
P Shved

Antworten:

92

mingw32 existiert als Paket für Linux. Sie können Windows-Anwendungen damit kompilieren und verknüpfen. Hier im Code :: Blocks-Forum gibt es ein Tutorial . Beachten Sie, dass sich der Befehl beispielsweise in ändert x86_64-w64-mingw32-gcc-win32.

Ubuntu hat beispielsweise MinGW in seinen Repositories:

$ 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
[...]
AndiDog
quelle
3
Wenn Sie debian verwenden, befindet sich mingw32 bereits im Repository, zusammen mit einigen vorkompilierten Bibliotheken.
Liori
1
Nun, es gibt eine Cross-Compilation-Umgebung unter nongnu.org/mingw-cross-env . Dazu gehört beispielsweise Freeglut. Aber ich habe das nicht benutzt, also frag mich nicht danach;)
AndiDog
4
Bedeutet die "32" in mingw32, dass ich nur eine 32-Bit-Binärdatei erzeugen kann? Gibt es eine Lösung, um auch eine 64-Bit-Binärdatei zu erstellen?
bluenote10
1
bluenote10: Es gibt Varianten, die für x64 erstellt werden, z. B. "x86_64-w64-mingw32-g ++". Die Basis "mingw32" kann oder kann nicht fähig sein, aber es ist einfach genug, die Varianten nach Namen zu installieren / zu verwenden. ar2015: Unterstützt es C ++ 11 überhaupt nicht oder sprechen Sie von einem Problem, das Sie damit hatten? Ich arbeite daran, ein Projekt mit mingw zu erstellen, während wir sprechen, und dies wäre eine gute Information. Andere Threads geben an, dass es c ++ 11 unterstützt (z . B. stackoverflow.com/questions/16136142/… ). Natürlich würde ich gerne helfen, aber dafür wäre ein separater Beitrag am besten.
John P
1
Haben sich die Dinge zu diesem Thema in letzter Zeit geändert?
Montreal
30

Eine Möglichkeit zum Kompilieren für Windows unter Linux ist mingw. Ich habe hier ein sehr hilfreiches Tutorial gefunden .

Führen Sie den folgenden Befehl aus, um mingw32 auf Debian-basierten Systemen zu installieren:
sudo apt-get install mingw32

Um Ihren Code zu kompilieren, können Sie Folgendes verwenden:
i586-mingw32msvc-g++ -o myApp.exe myApp.cpp

Manchmal möchten Sie die neue Windows-Anwendung direkt unter Linux testen. Sie können dafür Wein verwenden, obwohl Sie immer bedenken sollten, dass Wein Fehler haben kann. Dies bedeutet, dass Sie möglicherweise nicht sicher sind, ob ein Fehler in Wine, Ihrem Programm oder beiden vorhanden ist. Verwenden Sie Wein daher nur für allgemeine Tests.

Führen Sie Folgendes aus, um Wein zu installieren:
sudo apt-get install wine

aggregat1166877
quelle
7
Sie müssen nicht angeben mingw32-binutilsund mingw32-runtimeweil sie Abhängigkeiten vonmingw32
Henje
cool, das cpp hatte sehr einfache fehler ( void main(){}etc ...), ich denke es kompiliert unter windows aber schlägt bei mingw fehl, ich habe sie behoben. Ich habe es auch versucht i586-mingw32msvc-cppund es wurde eine Textdatei mit so etwas wie zu kompilierenden Dingen generiert lol .. das g ++ hat funktioniert, danke!
Wassermann Macht
2
@henje um gründlich zu sein, wenn Sie sie nicht angeben, können sie vom Paketmanager bei der Deinstallation automatisch entfernt werden mingw32(als "Abhängigkeiten" gekennzeichnet. Wenn Sie sie angeben, werden sie nicht (als "manuell" gekennzeichnet).
Matthieu
19

Vorgeschlagene Methode gab mir Fehler unter Ubuntu 16.04: E: Paket mingw32 konnte nicht gefunden werden

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

Um dieses Paket unter Ubuntu zu installieren, verwenden Sie bitte Folgendes:

sudo apt-get install mingw-w64

Nach der Installation können Sie es verwenden:

x86_64-w64-mingw32-g++

Bitte beachten Sie!

Für 64-Bit-Verwendung: x86_64-w64-mingw32-g ++

Für 32-Bit-Verwendung: i686-w64-mingw32-g ++

0x8BADF00D
quelle
14

Installieren Sie einen Cross-Compiler wie mingw64 von Ihrem Paketmanager. Kompilieren Sie dann folgendermaßen: Anstatt einfach den gccAufruf i686-w64-mingw32-gccfür 32-Bit-Windows oder x86_64-w64-mingw32-gcc"64-Bit-Windows aufzurufen . Ich würde auch die --staticOption verwenden, da das Zielsystem möglicherweise nicht alle Bibliotheken hat.

Wenn Sie eine andere Sprache wie Fortran kompilieren möchten, ersetzen Sie diese -gccdurch -gfortrandie vorherigen Befehle.

Pedro Miranda
quelle
7

Ich habe mingw unter Linux verwendet, um ausführbare Windows-Dateien in C zu erstellen. Ich vermute, dass C ++ auch funktionieren würde.

Ich habe ein Projekt, ELLCC, das Clang und andere Dinge als Cross-Compiler-Toolkette verpackt. Ich benutze es, um Clang (C ++), Binutils und GDB für Windows zu kompilieren. Folgen Sie dem Download-Link auf ellcc.org, um vorkompilierte Binärdateien für mehrere Linux-Hosts zu erhalten.

Richard Pennington
quelle
1
Seit ich diese Antwort gepostet habe, bin ich noch ein bisschen weiter gegangen. Ich habe ein Projekt, ELLCC, das Clang und andere Dinge als Cross-Compiler-Toolkette verpackt. Ich benutze es, um Clang (C ++), Binutils und GDB für Windows zu kompilieren. Folgen Sie dem Download-Link auf ellcc.org, um vorkompilierte Binärdateien für mehrere Linux-Hosts zu erhalten.
Richard Pennington
5

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

Ab Fedora 17 ist es möglich, auf einfache Weise Binärdateien für die Ziele win32 und win64 zu erstellen (zu kompilieren). Dies wird mithilfe der Toolkette mingw-w64 realisiert: http://mingw-w64.sf.net/ . Mit dieser Toolchain können Sie Binärdateien für die folgenden Programmiersprachen erstellen: C, C ++, Objective-C, Objective-C ++ und Fortran.

"Tipps und Tricks zur Verwendung des Windows-Cross-Compilers": https://fedoraproject.org/wiki/MinGW/Tips

iljau
quelle
3

für Fedora ist es

sudo yum groupinstall -y "MinGW cross-compiler"
Assgeier
quelle
1
Für alle Fedora-Benutzer: Hier gibt es ein großartiges Tutorial: fedoraproject.org/wiki/MinGW (bearbeitet wegen falschem Link)
LemurPwned
Genau das, wonach ich gesucht habe! Funktioniert auch mit sudo dnf groupinstall ....