2010-01-09 14 views
67

J'ai écrit quelques effets en C++ (g ++) en utilisant freeglut sous Linux, et je les compiler avecComment compiler pour Windows sous Linux avec gcc/g ++?

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

Je me demandais s'il est possible d'avoir g ++ faire des exécutables statiques compilés Windows qui contient tout le nécessaire?

Je n'ai pas Windows, donc ce serait vraiment cool, si je pouvais le faire sur Linux :)

+4

@AndiDog, "La première dose gratuitement" , droite. Quoi qu'il en soit, la mise en place d'un processus de compilation automatisé sur une machine Windows, alors que vous en avez terminé un pour Linux, n'est pas nécessaire. –

+0

Comment testeriez-vous votre logiciel Windows sans Windows? Utiliser du vin? –

+3

@ el.pescado, la construction et les tests sont des tâches complètement différentes. Windows est inutile pour l'ancien. –

Répondre

59

mingw32 existe comme un package pour Linux. Vous pouvez cross-compiler et -link les applications Windows avec elle. Il y a un tutoriel here at the Code::Blocks forum. Notez que la commande passe à mingw32-gcc, par exemple.

EDIT: Debian Linux, par exemple, a MinGW dans ses dépôts:

$ apt-cache search mingw 
mingw32 - Minimalist GNU win32 (cross) compiler 
mingw32-binutils - Minimalist GNU win32 (cross) binutils 
mingw32-runtime - Minimalist GNU win32 (cross) runtime 
gcc-mingw32 - The GNU Compiler Collection (cross compiler for MingW32) 
... 
+2

Si vous utilisez debian, mingw32 est déjà dans le dépôt, ainsi que quelques bibliothèques précompilées. – liori

+0

Oui vient de l'ajouter à mon message que vous avez écrit votre commentaire :) Thx – AndiDog

+0

pour être complet, vous auriez besoin de fournir une bibliothèque de glut compatible mingw aussi, non? – Bahbar

5

Je l'ai utilisé MinGW sous Linux pour faire en exécutables Windows C, je pense C++ fonctionnerait aussi bien.

+3

........... Comment? –

+1

Depuis que j'ai posté cette réponse, je suis allé un peu plus loin. J'ai un projet, ELLCC, qui conditionne le clang et d'autres choses comme une chaîne d'outils de compilateur croisé. Je l'utilise pour compiler clang (C++), binutils, et GDB pour Windows. Suivez le lien de téléchargement à http://ellcc.org pour les binaires précompilés pour plusieurs hôtes Linux. –

20

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

Pour installer mingw32 sur les systèmes Debian, exécutez la commande suivante:
sudo apt-get install mingw32 mingw32-binutils mingw32-runtime

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

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

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

+4

vous n'avez pas besoin de spécifier 'mingw32-binutils' et' mingw32-runtime' car ce sont des dépendances de 'mingw32' – henje

+0

cool, le cpp avait des erreurs très simples (' void main() {} 'etc ...), Je suppose qu'il compile à windows mais échoue à mingw, je les ai réparés. J'ai essayé aussi 'i586-mingw32msvc-cpp' et il a généré un fichier texte avec quelque chose comme des choses à compiler lol .. le g ++ a fonctionné, thx! –

3

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

À partir de Fedora 17, il est possible de créer facilement des fichiers binaires (cross-compilation) 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 l'utilisation du compilateur croisé Windows": https://fedoraproject.org/wiki/MinGW/Tips

1

pour Fedora, il est

sudo yum groupinstall -y "MinGW cross-compiler" 
7

Installer un compilateur croisé, comme mingw64 de votre gestionnaire de paquets. Puis compiler de la manière suivante: au lieu d'appeler simplement gcc, appelez i686-w64-mingw32-gcc pour Windows 32 bits ou x86_64-w64-mingw32-gcc" pour Windows 64 bits. Je voudrais également utiliser l'option --static, car le système cible peut ne pas avoir toutes les bibliothèques.

Si vous souhaitez compiler une autre langue, comme Fortran, remplacez -gcc par -gfortran dans les commandes précédentes.

1

méthode proposée m'a donné erreur sur Ubuntu 16.04: E: Unable to locate package mingw32

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

Pour installer cette package sur Ubuntu s'il vous plaît utiliser ce qui suit:

sudo apt-get install mingw-w64 

Après avoir installé pouvez l'utiliser:

x86_64-w64-mingw32-g++ 

Veuillez noter!

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

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