Comment compiler pour Windows sous Linux avec gcc / g ++?

119

J'ai écrit quelques effets en C ++ (g ++) en utilisant freeglut sous Linux, et je les compile avec

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

Je me demandais donc s'il était possible que g ++ crée des exécutables Windows compilés statiques contenant tout le nécessaire?

Je n'ai pas Windows, donc ce serait vraiment cool, si je pouvais faire ça sous Linux :)

Louise
la source
4
@AndiDog, "Première dose gratuite", à droite. Quoi qu'il en soit, la configuration d'un processus de construction automatisé sur une machine Windows, alors que vous en avez un terminé et fonctionnel pour Linux, n'est pas nécessaire.
P Shved le
Comment testeriez-vous votre logiciel Windows sans Windows? Vous utilisez du vin?
el.pescado
7
@ el.pescado, la construction et les tests sont des tâches complètement différentes. Windows n'est pas nécessaire pour le premier.
P Shved le

Réponses:

92

mingw32 existe en tant que package pour Linux. Vous pouvez compiler et lier des applications Windows avec lui. Il y a un tutoriel ici sur le forum Code :: Blocks . Notez que la commande devient x86_64-w64-mingw32-gcc-win32, par exemple.

Ubuntu, par exemple, a MinGW dans ses référentiels:

$ 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
la source
3
Si vous utilisez debian, mingw32 est déjà dans le référentiel, ainsi que quelques bibliothèques précompilées.
liori
1
Eh bien, il existe un environnement de compilation croisée sur nongnu.org/mingw-cross-env . Il inclut le freeglut, par exemple. Mais je ne l'ai pas utilisé, alors ne me posez pas de questions à ce sujet;)
AndiDog
4
Le "32" dans mingw32 signifie-t-il que je ne peux produire qu'un binaire 32 bits? Existe-t-il une solution pour produire également un binaire 64 bits?
bluenote10
1
bluenote10: il existe des variantes qui se construisent pour x64, telles que "x86_64-w64-mingw32-g ++". La base "mingw32" peut être capable ou non, mais il est assez facile d'installer / utiliser les variantes par nom. ar2015: Ne supporte-t-il pas du tout C ++ 11 ou parlez-vous d'un problème que vous avez rencontré? Je travaille sur un projet à construire avec mingw au moment où nous parlons et ce serait une bonne information à savoir. D'autres threads indiquent qu'il prend en charge C ++ 11 (par exemple, stackoverflow.com/questions/16136142/… ). Bien sûr, je serais heureux de vous aider, mais un message séparé serait le mieux pour cela.
John P
1
Les choses sur ce sujet ont-elles changé récemment?
Montréal le
30

Une option de compilation pour Windows sous Linux est via mingw. J'ai trouvé un tutoriel très utile ici .

Pour installer mingw32 sur des systèmes basés sur Debian, exécutez la commande suivante:
sudo apt-get install mingw32

Pour compiler votre code, vous pouvez utiliser quelque chose comme:
i586-mingw32msvc-g++ -o myApp.exe myApp.cpp

Vous aurez parfois envie de tester la nouvelle application Windows directement sous Linux. Vous pouvez utiliser le vin pour cela, même si vous devez toujours garder à l'esprit que le vin peut avoir des bogues. Cela signifie que vous n'êtes peut-être pas sûr qu'un bogue est dans wine, votre programme ou les deux, donc n'utilisez wine que pour des tests généraux.

Pour installer wine, exécutez:
sudo apt-get install wine

agrégat1166877
la source
7
vous n'avez pas besoin de spécifier mingw32-binutilset mingw32-runtimeparce qu'ils sont des dépendances demingw32
henje
cool, le cpp avait des erreurs très simples ( void main(){}etc ...), je suppose qu'il se compile sous windows mais échoue à mingw, je les ai corrigés. J'ai essayé aussi i586-mingw32msvc-cppet cela a généré un fichier texte avec quelque chose comme des choses à compiler lol .. celui de g ++ a fonctionné, merci!
Aquarius Power
2
@henje pour être minutieux, si vous ne les spécifiez pas, ils peuvent être supprimés automatiquement par le gestionnaire de paquets lors de la désinstallation mingw32(marqués comme "dépendances". Si vous les spécifiez, ils ne le seront pas (marqués comme "manuels").
Matthieu
19

La méthode suggérée m'a donné une erreur sur Ubuntu 16.04: E: Impossible de localiser le package mingw32

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

Pour installer ce package sur Ubuntu, veuillez utiliser ce qui suit:

sudo apt-get install mingw-w64

Après l'installation, vous pouvez l'utiliser:

x86_64-w64-mingw32-g++

Notez s'il vous plaît!

Pour une utilisation 64 bits: x86_64-w64-mingw32-g ++

Pour une utilisation 32 bits: i686-w64-mingw32-g ++

0x8BADF00D
la source
14

Installez un compilateur croisé, comme mingw64 à partir de votre gestionnaire de paquets. Ensuite, compilez de la manière suivante: au lieu d'appeler simplement gcccall i686-w64-mingw32-gccpour Windows 32 bits ou x86_64-w64-mingw32-gcc"pour Windows 64 bits. J'utiliserais également l' --staticoption, car le système cible peut ne pas avoir toutes les bibliothèques.

Si vous souhaitez compiler un autre langage, comme Fortran, remplacez -gccpar -gfortrandans les commandes précédentes.

Pedro Miranda
la source
7

J'ai utilisé mingw sous Linux pour créer des exécutables Windows en C, je suppose que C ++ fonctionnerait également.

J'ai un projet, ELLCC, qui comprend des paquets clang et d'autres choses comme une chaîne d'outils de compilation croisée. Je l'utilise pour compiler clang (C ++), binutils et GDB pour Windows. Suivez le lien de téléchargement sur ellcc.org pour les binaires précompilés pour plusieurs hôtes Linux.

Richard Pennington
la source
1
Depuis que j'ai publié cette réponse, je suis allé un peu plus loin. J'ai un projet, ELLCC, qui comprend des paquets clang et d'autres choses comme une chaîne d'outils de compilation croisée. Je l'utilise pour compiler clang (C ++), binutils et GDB pour Windows. Suivez le lien de téléchargement sur ellcc.org pour les binaires précompilés pour plusieurs hôtes Linux.
Richard Pennington
5

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

Depuis Fedora 17, il est possible de construire facilement (cross-compile) des binaires pour les cibles win32 et win64. Ceci est réalisé en utilisant la chaîne d'outils mingw-w64: http://mingw-w64.sf.net/ . L'utilisation de cette chaîne d'outils vous permet de créer des binaires pour les langages de programmation suivants: C, C ++, Objective-C, Objective-C ++ et Fortran.

"Trucs et astuces pour utiliser le compilateur croisé Windows": https://fedoraproject.org/wiki/MinGW/Tips

iljau
la source
3

pour Fedora c'est

sudo yum groupinstall -y "MinGW cross-compiler"
charognard
la source
1
Pour tous ces utilisateurs de Fedora: il y a un excellent tutoriel ici: fedoraproject.org/wiki/MinGW (modifié parce que le lien est erroné)
LemurPwned
Exactement ce que je cherchais! Fonctionne sudo dnf groupinstall ...aussi avec .