Introduction

Pour tous ceux qui comme moi ont déjà utilisé gcc sous des systèmes UNIX ou GNU/Linux, il est parfois délicat de faire du développement sous Windows.

En effet il n’existe pas de compilateur par défaut installé sur le système. Pour remédier à cela il existe un bon nombre de solutions payantes ou gratuites qui ont chacune leurs avantages et leurs inconvénients. Parmi ces solutions il existe plusieurs portages de gcc pour Windows. Les deux plus connus sont Cygwin (wiki) et MinGW (wiki).

Ces deux solutions permettent d’utiliser gcc sous Windows, je préfère personnellement MinGW car contrairement à Cygwin, les exécutables créés ne nécessitent pas la présence d’une bibliothèque DLL pour être utilisés et les termes d’usage et de license sont (beaucoup) plus souples.

De plus, ce tuto présente les démarche pour installer MinGW en vue de l’utiliser avec Eclipse CDT 7.
Eh oui ! vous avez bien vu CDT 7, c’est une version non stable de CDT. J’ai été obligé de passer à cette version suite à des problèmes avec la dernière version stable (6.0.2). Mais j’en reparlerai plus tard.

Êtes-vous concernés ?

Ce tutoriel est fait pour vous si :

  • Vous voulez utiliser des commandes telles que gcc, ld, make, gdb, gprof sous Windows.
  • Vous cherchez un moyen de compiler des programmes en C ou C++ (voire en assembleur) sous Windows.
  • Vous voulez écrire des programmes en utilisant les API natives de Windows.
  • Vous voulez utiliser la "C standard library" ou la "C++ STL".

Ce tutoriel n’est pas fait pour vous si :

  • Vous voulez utiliser des commandes telles que ls, cp, mv sous Windows.
  • Vous voulez faire du C ou du C++ sur MacOS, GNU/Linux, UNIX, BSD.
  • Vous voulez utiliser le .NET Framework ou les MFC.

MinGW

MinGW est une collection d’outils permettant de faire de la programmation, parmi ces outils sont présents des portages de GCC, GDB, MAKE…

C’est un projet libre et gratuit que l’on peut utiliser pour créer des programmes libres ou non.

Comme je l’ai dit plus haut, un de ces avantages est qu’il ne nécessite pas la présence de DLL intermédiaires (comme Cygwin, ou Visual Studio 2005). Un autre de ses autres avantages est la présence d’un portage de l’API Windows sous forme de headers et librairies.

MinGW se décompose en plusieurs packages remplissant chacun une fonction (compilation, debuggage, API, …).

Installation de MinGW

L’installation de MinGW peut être réalisée par plusieurs façons. Il existe des installeurs permettant d’installer ‘automatiquement’ MinGW en sélectionnant les packages nécessaires. Personnellement je conseille une installation manuelle en choisissant exactement les package que l’on souhaite utiliser.

Sélection des packages

Pour utiliser la dernière version de gcc (4.5), l’installation fonctionnelle minimale de MinGW nécessite les packages suivants :

  • gcc-core : Le compilateur c
  • binutils : Les outils de linkage, assemblage, gestion des ressources, …
  • mingw-runtime : Les headers et librairies permettant d’utiliser les fonctions de base du standard C/C++
  • w32api : Les headers et librairires permettant d’utiliser les fonctions de l’API Windows
  • gmp, mpc, mpfr : des librairies de calcul mathématique avancé utilisées par gcc

De plus si vous souhaitez utiliser MinGW avec CDT dans Eclipse, les packages suivants sont indispensables :

  • gdb : Le portage du debuggeur GNU gdb
  • mingw32-make : Le portage de l’outil make
  • gcc-g++ : Le compilateur c++
  • expat : Librairie utilisée par gdb

Les packages sont à récupérer sur SourceForge à l’adresse suivante : http://sourceforge.net/projects/mingw/files/

Pour les habitués de SourceForge, ça ne devrait pas poser de problème, pour les autres, le truc consiste à repérer les liens contenant "mingw32-bin" ou "mingw32-dev" (et PAS "mingw32-src").

Ces packages sont régulièrement mise à jour par l’équipe de MinGW, je vous conseille de prendre les dernières versions ‘stable’, ‘release condidate’ (ou ‘technology preview’ pour gcc).

Pour info, à l’heure ou j’écris ce tuto, les versions que j’utilise sont :

Notes sur gcc 4.5.0 et les packages supplémentaires
Depuis la version 4.5.0 gcc, nécessite des dépendances supplémentaires pour pouvoir fonctionner, ces dépendances sont les 3 librairies mpc, mpfr et gmp.
Pour ma part, je n’utilise pas ces librairies dans mes programmes, mais il est quand même nécessaire d’avoir les 3 dll correspondantes pour faire fonctionner le compilateur. C’est comme ça, on a pas le choix !
De même gdb nécessite la librairie expat pour fonctionner.

Installation des packages

Une fois la sélection et le téléchargement des packages terminés, l’installation est plutôt simple :

  1. Créer un répertoire qui sera la racine de MinGW, de préférence sans espace dans le chemin. Les anciennes versions d’Eclipse CDT (ex CDT 4) nécessitaient que ce chemin soit obligatoirement "C:\MinGW", c’est pourquoi j’ai pris l’habitude de l’installer là. En ce qui vous concerne, je conseille ce chemin pour être sûr que ça fonctionne.
  2. Tout décompresser dans ce répertoire.

Remarque : Pour décompresser utiliser un utilitaire tel que 7zip, Winzip ou WinRar, les formats .gz et .bz2 sont en général reconnus par tous les logiciels de décompression à l’heure actuelle.

Les petits plus

L’installation de MinGW obtenue comporte quelques inconvéniants, c’est pourquoi il est vivement recommandé, de suivre les étapes suivants pour finaliser l’installation.

Modification de la variable d’environnement Path

Cette étape permet de pouvoir écrire directement dans l’invite de commande "gcc" sans avoir à spécifier le chemin vers gcc (ex : "C:\MinGW\bin\gcc"). De plus cette étape est vivement recommandée si vous souhaitez utiliser MinGW avec Eclipse-CDT (obligatoire avec les vieilles versions).

Pour réaliser ça, il faut ajouter à la variable d’environnement Path le chemin vers le sous-dossier bin de la racine de l’installation de MinGW (ex : "C:\MinGW\bin").

Pour Windows XP, la démarche à faire est :

Clic-droit sur l’icône du Poste de travail -> "Propriétés" -> onglet "Avancé" -> clic sur "Variables d’environnement" -> sélectionner "Path" dans les variables système -> clic sur "Modifier" -> Ajouter dans "Valeur de la variable" : ";" suivi du chemin décrit plus tôt (ex: ";C:\MinGW\bin"). -> Clic sur "OK" (trois fois) pour tout confirmer

Modification de la variable d\'environnement Path

Ajout de la commande ‘make’

Si vous avez correctement suivi toutes indications (y compris les facultatives), le package mingw32-make qui correspond au portage de MAKE par MinGW devrait être installé. Le seul hic c’est que la commande "make" ne fonctionne pas, en effet pour appeller make, il faut écrire : "mingw32-make". C’est pourquoi je recommande d’ajouter la commande "make" en suivant les étapes ci-dessous :

Créer un nouveau fichier avec le Bloc-Notes Windows contenant les lignes suivantes :

@echo off
mingw32-make %*
 

PS : la dernière ligne blanche ne doit pas être oubliée !

Enregistrer ce fichier dans le dossier bin de l’installation de MinGW (ex : "C:\MinGW\bin") en l’appellant : "make.cmd" (Attention à ce qu’il ne soit pas nommé "make.cmd.txt")

Après cela, lorsque vous tapperez "make" dans l’invite de commandes, tout se passera comme si c’était "mingw32-make" qui aura été écrit (avec les arguments transmis biensûr)

Tester l’installation

Une fois que l’installation est terminée je conseille de la tester en créant un bon vieux Hello World.

Pour cela créer un fichier hello.c avec n’importe quel éditeur de texte contenant :

#include <stdio.h>
int main(int argc, char *argv[])
{
  printf("Hello World\n");
}
 

Enregistrer ce fichier n’importe où, puis le compiler en exécutant dans l’invite de commande dans le dossier ou se trouve ce fichier la commande suivante :

gcc hello.c -o hello.exe

Si une erreur apparaît c’est que l’installation ne s’est pas correctement déroulée, dans ce cas bien vérifier que toutes les étapes du tuto ont correctement été respéctées (y compris la partie "petits plus" pour la variable d’environnement)

Puis exécuter le programme obtenu en tapant :

hello

Le message "Hello World" devrait s’afficher à l’écran.

Si aucun message d’erreur ou d’avertissement n’apparaît, c’est que MinGW est bien installé !

Conclusion

Avec cette installation vous pourrez maintenant utiliser gcc (et g++) autant que vous le souhaitez, la plupart (malheureusement pas tous) des programmes respectants la norme POSIX se compileront et s’exécuteront bien, de même pour les programmes utilisant l’API Windows native (Attention, cela ne concerne pas les programmes utilisant le .NET Framework)

Si vous avez suivi toutes les étapes (y compris les facultatives et les petits plus) vous pourrez aussi utiliser cet environnement de compilation avec Eclipse CDT version 7 qui est (sans vouloir faire de la pub) un environnement de développement C/C++ bien abouti et représentant une très bonne alternative à MS Visual Studio (propriétaire et payant)

Vous pourrez aussi utiliser des outils très pratiques comme gdb ou gprof que j’ai testés et qui fonctionnent très bien.

Remarques

Versions des outils

L’installation décrite est compatible avec Eclipse CDT 7.0.0 et une version très récente d’Eclipse (pour moi 3.6M6). Je n’ai pas réussi à faire fonctionner la dernière version de MinGW-GCC (4.5) avec CDT 6.0.2 (la dernière stable) et Eclipse 3.5.1. Pour info, mon OS est Windows 7 64 bits et la version d’Eclipse utilisée est 3.6M6 64 bits (x86_64).

Librairies standard pour le C++

Ceux d’entre vous qui tenteront d’utiliser g++ auront d’étranges surprises. En effet, un programme codé en C++ utilise presque systématiquement les librairies standard C++. Jusque là pas d’inquiétude, sauf que depuis les versions récentes de g++ (4.4 et 4.5) ces librairies sont linkées (reliées au programme principal) de façon dynamique alors que dans les vieilles version c’était statique. L’impact c’est qu’il est donc nécessaire d’avoir ces librairies (standard C et standard C++) accessibles sous forme de dll (libgcc_s_dw2.dll et libstdc++-6.dll) distribuées avec le programme principal, sinon il ne fonctionnera pas. Ces DLL sont téléchargeables sur le site SourceForge de MinGW.
Il existe aussi une alternative à devoir se trimbaler ces DLL avec son exécutable. C’est de forcer le linkage statique. C’est possible en ajoutant les options de linkage suivantes (sur gcc ou ld) : -static-libgcc -static-libstdc++
Cela va rendre l’exécutable plus gros (car il inclura une partie du code présent dans les dll précédentes), mais les dépendances DLL sont supprimées, ce qui rend la distribution du programme plus simple.

9 Responses to “Installer MinGW, ou comment faire du gcc sous Windows (version 2010)”


  1. [...] tuto est accessible via le lien suivant : http://devtricks.wordpress.com/installer-mingw-ou-comment-faire-du-gcc-sous-windows-version-2010/ Posted by superbob56 Filed in HowTo, Technology, Tutoriel Tags: C++, Gcc, HowTo, MinGW, [...]

  2. Nico Says:

    Franchement merci beaucoup, ce tuto est très clair, j’m’en serais pas sorti sans^^
    Bisous :)

  3. tayssir Dev Says:

    Merci un milliard de fois pour ce tutoriel qui a valeur d’aumône ;)

  4. Wamba Says:

    Plus clair et précis tu meurs, merci !

  5. Freedom Says:

    Bonjour,

    C’est possible de compresser ton dossier MinGW fonctionnel et le mettre ici en téléchargement ou m’envoyer un lien à mon adresse ? ça serai vraiment cool, perso je m’en sors pas. y a toujours un fichier qui foire. tu utilise quel version de Qt ?

    Merci

    freedom.power@live.fr

    • superbob56 Says:

      Je n’ai plus d’environnement de compilation MinGW actuellement, par contre, à l’époque, je n’utilisais pas Qt pour faire fonctionner MinGW.
      Les différents téléchargements référencés sur cette page (gcc-core, gcc-c++, binutils, runtime, …) sont suffisants pour faire du C/C++ sans avoir besoin de Qt.
      Pour faire du Qt c’est un autre problème, la dernière fois que j’en avais fait j’avais utilisé un installeur prêt à l’emploi qui installait Qt et MinGW en même temps en récupérant les différents fichiers nécéssaires.

  6. meulle guillaume Says:

    Merci beaucoup, c’était super facile en suivant les explications!

  7. hakim Says:

    J’ai une question:
    toujours on trouve un seul exemple de "Hello word". mais moi je veux utiliser MinGW pour compiler un programme qui a plusieurs fichier source (.c) et plusieur fichier entête (.h). comment je peux faire? c’est quoi l’équivalent de : "gcc hello.c o- hello.exe" dans ce cas?

    merci bcp

    • superbob56 Says:

      Normalement, c’est pareil que sous Linux. Pour ma part, je génère un fichier object pour chaque c :
      gcc -c fichier1.c ; gcc -c fichier2.c …
      Puis je linke tout à la fin :
      gcc fichier1.o fichier2.o -o prog.exe
      Avec un bon Makefile ça se fait tout seul.
      Sinon avec Eclipse CDT ça marche bien aussi :)

      Si tu n’es pas à l’aise avec l’utilisation de ces commandes gcc, je te conseille de suivre un tutoriel, il doit y en avoir de dispo sur Linux (ggl:"Linux gcc tutorial multiple source"), et les commandes sont les mêmes à taper en principe avec MinGW.


Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Suivre

Recevez les nouvelles publications par mail.

%d bloggers like this: