Developpez.com - C
X

Choisissez d'abord la catégorieensuite la rubrique :

Guide de la Compilation de Gcc sous windows avec MinGW

Date de publication : 22/09/2007 , Date de mise à jour : 05/09/2010


III. MSYS: un système linux sous windows
III-A. Choisir sa méthode d'installation
III-A-1. La liste des archives
III-A-2. L'installation entièrement manuelle
III-A-3. Un installateur "tout en un": mingw-get
III-A-3-a. L'installation en ligne de commande
III-A-3-a-i. Surveillez la sortie de mingw-get
III-A-3-b. L'installation avec l'interface graphique
III-A-3-b-i. La page d'accueil
III-A-3-b-ii. L'accord de la license
III-A-3-b-iii. Choix du dossier de destination
III-A-3-b-iv. Créer un raccourci ?
III-A-3-b-v. Sélection des parties à installer
III-A-3-c. Derniers préparatifs
III-B. Premiers contacts
III-B-1. La console sous linux
III-B-2. Bienvenue sous linux
III-B-3. Créer les dossiers de travail
III-B-4. L'arborescence finale
III-B-5. Convention pour les codes
III-B-6. Configurer les chemins d'accès


III. MSYS: un système linux sous windows

GCC est une collection d'outils venant tout droit du monde de linux. A ce titre, il est particulièrement attaché aux outils GNU pour sa compilation.

Je ne prétend pas qu'il est impossible de le compiler sans les outils GNU prévus à cet effet (M4, make, autoconf...) mais je prétend réellement que le plus facile reste quand même d'utiliser ces outils.

L'idéal est donc de disposer d'un système qui puisse émuler linux alors que nous resterons bien au chaud sous windows. L'outil que je vous propose d'utiliser pour ce faire est fourni par l'équipe de MinGW et s'appelle MSYS.

MSYS est l'abréviation de Minimal SYStem, et va vous permettre de disposer de l'ensemble des outils qui vous permettront d'effectuer la compilation.

Vous pouvez le télécharger librement sur le site de MinGW ou sur l'un des miroirs mis à disposition par Sourceforge.

Le plus facile à l'heure actuelle pour se procurer l'ensemble des outils nécessaire est de passer par un outil qui ne fonctionne actuellement qu'en ligne de commande : mingw-get.


III-A. Choisir sa méthode d'installation

Vous disposez de trois possibilité pour installer les outils de base que sont la suite binutils, le compilateur Gcc et MSYS:

  1. Le téléchargement et l'installation entièrement manuelle des parties nécessaires
  2. l'utilisation de mingw-get en ligne de commandes
  3. l'utilisation d'un installateur graphique de mingw-get
Toutes trois auront pour objectif de télécharger et de décompresser une liste assez impressionnante d'archives dans un répertoire donné.


III-A-1. La liste des archives

Afin d'obtenir le minimum vital pour nous permettre de compiler Gcc par nous même, il nous faudra deux paquetages distinct, composés tous deux d'un grand nombre d'archive:

Le paquetage MinGW qui fournit les outils de compilations indispensables et qui est composé de

Le paquetage msys fournit quant à lui l'ensemble des outils nécessaires pour disposer d'un système linux minimaliste suffisant pour travailler.  Il est composé des archives suivantes:

En effet, l'équipe de MinGW semble avoir décidé de ne plus fournir d'archive globale pour leur système, et il faut donc veiller à récupérer l'ensemble des outils et des dépendances dont nous aurons besoin.

L'ensemble de ces archives est disponible sur le site de MinGW.

info Les versions présentées ici sont celles utilisées au moment d'écrire ces lignes.


III-A-2. L'installation entièrement manuelle

Vous pouvez parfaitement décider de télécharger l'ensemble de ces archives une à une et de les décompresser dans le dossier de votre choix.

Cependant, vous aurez alors besoin d'un gestionnaire d'archive capable de traiter les formats lzma et tar tel que winrar ou 7zip.

Comme la liste est relativement impressionnante et que vous ne disposez peut être pas d'un gestionnaire d'archives approprié, il sera surement plus simple d'utiliser mingw wget.


III-A-3. Un installateur "tout en un": mingw-get

La manière la plus simple de démarrer est sans doute d'utiliser l'utilitaire mingw-get fourni sur le site de MinGW

Deux versions de celui-ci sont actuellement disponibles:

La version en ligne de commande est fournie sous la forme d'une archive "classique", au format .tar.gz et au format .zip.

Vous pouvez sans problème choisir le format .zip qui est naturellement supporté sous windows, le format .tar.gz nécessitant d'être ouvert avec des outils plus perfectionnés (étant donné que nous ne disposons pas encore de MSYS) tel que 7zip, winrar ou autres.


III-A-3-a. L'installation en ligne de commande
Décompressez l'archive dans le dossier de votre choix.

Mingw-get installera le compilateur dans son dossier courent et, comme nous ne souhaitons l'utiliser que de manière temporaire (le temps d'effectuer notre compilation), je vous conseillerais de le placer dans le dossier c:\temp, que ne considérerai comme étant le répertoire utilisé.

Lancez une "invite de commande" en passant par le menu "Démarer->accessoires->Invite de commandes ou par tout raccourcis vers celle-ci dont vous disposeriez.

Entrez dans le dossier dans lequel vous venez de décompresser l'archive de mingw-get et rajoutez le répertoire c:\temp\bin (qui est le dossier dans lequel se trouve effectivement mingw-get.exe) à votre variable PATH

c:\Users\philippe>cd \temp
c:\temp set PATH=%PATH%;c:\temp\bin
Demandez à mingw-get d'installer gcc-core et la base nécessaire pour MSYS, et éventuellement de Ada.

Nous demandons également l'installation de quelque paquetages propres à msys qui seront nécessaire pour le processus de compilation des différents outils: flex, bison et texinfo.

c:\temp\bin>mingw-get install gcc-core ada msys-bison msys-texinfo msys-flex
A partir d'ici, vous ne devriez plus avoir besoin de l'invite de commandes de windows.

info Le terme ada n'est, bien évidemment, nécessaire que si vous souhaitez compiler Gcc avec le support de ce langage activé, car le compilateur Ada est écrit en Ada, alors que tous les autres sont écrits en C.

Autrement, vous pouvez vous contenter de lancer la commande
c:\temp\bin>mingw-get install gcc-core msys-base
info Vous pourriez également décider d'installer d'autres langages tels que c++, objc ou fortran, mais ils ne sont pas indispensables pour l'usage que nous prévoyons d'en faire. 
warning Vous ne pourrez pas lancer mingw-get sans lui fournir d'arguments: Toute tentative en ce sens aurait pour résultat d'essayer de lancer une interface graphique qui n'est pas fournie pour le moment.
Mingw-get téléchargera dans un premier temps une série de fichiers xml décrivant les différents paquets et leurs dépendances, puis les paquets demandés (et leurs dépendances), et terminera en les décompressant dans son dossier racine.

Mingw-get récupérera également quelques archives supplémentaires qui ne sont pas absolument nécessaire comme celles relatives à la licence d'utilisation ou à la documentation.


III-A-3-a-i. Surveillez la sortie de mingw-get
Il n'est pas impossible que mingw-get échoue dans sa tentative d'obtenir l'un ou l'autre fichier xml ou l'une ou l'autre archive.

Il émettra alors un message d'erreur, mais continuera à travailler comme si de rien n'était.

Laissez le simplement continuer son travail jusqu'au bout, et relancez la commande par la suite.

warning Ne tentez en aucun cas d'annuler la commande (avec CTRL + C) si vous obtenez une telle erreur: Cela aurait comme résultat le fait de renommer l'exécutable mingw-get.exe se trouvant dans le dossier c:\temp\bin en mingw-get.exe~ et la DLL mingw-get.dll se trouvant dans le dossier c:\temp\libexec\mingw-get en mingw-get.dll~, avec comme conséquence directe l'impossibilité de relancer la commande par la suite avant d'avoir rendu leur nom d'origine à ces fichiers.

III-A-3-b. L'installation avec l'interface graphique
Au moment d'écrire ces lignes, la version graphique de l'installateur est nommée mingw-get-inst-20100831.exe.

Il suffit, après l'avoir téléchargé, de le lancer de la manière habituelle.


III-A-3-b-i. La page d'accueil
Lorsque nous lancerons l'installateur, il vous présentera une page d'accueil finalement tout ce qu'il y a de plus classique.

Cliquons sur next sans nous en inquiéter.


III-A-3-b-ii. L'accord de la license
Nous arrivons sur la page relative à l'acceptation de la license d'utilisation.

Le texte affiché est celui de la GNU/GPL (version 3 au moment d'écrire ces lignes)

Nous ne pourrons pas aller plus loin avant d'avoir sélectionné le bouton "I accept the agrement".


III-A-3-b-iii. Choix du dossier de destination
L'installateur nous demandera dans quel dossier vous souhaitez installer mingw-get.  Il propose de placer mingw-get dans le dossier c:\MinGW par défaut.

Comme mingw-get placera les outils de compilation dans le dossier dans lequel il se trouve, et que nous ne souhaitons pas garder ceux-ci plus que nécessaire, je vous conseillerais de changer le dossier d'installation pour c:\temp, avant de cliquer sur suivant


III-A-3-b-iv. Créer un raccourci ?
Vous aurez ensuite l'occasion de choisir de créer ou non un raccourcis dans le menu démarrer.

Vous êtes bien évidemment libre de choisir de le faire ou non, mais pensez bien qu'il nous faudra lancer MSYS.


III-A-3-b-v. Sélection des parties à installer
Il est maintenant temps de sélectionner les parties que nous souhaitons installer.

Par défaut, la seule partie sélectionnée, que vous ne pouvez au demeurant pas désélectionner, est gcc-core, qui correspond au compilateur C.

Comme nous voulons utiliser MSYS pour compiler Gcc, il faudra descendre tout en bas et veiller à sélectionner MSYS Base.

Si vous envisagez de demander le support de Ada lors de la compilation, vous devrez également sélectionner cette partie car Ada ne peut être compilé... que par lui-même.

La fenêtre présentant la sélection minimale que vous devrez avoir (support d'Ada inclus) ressemblera alors à

sélection des parties à installer
sélection des parties à installer
Lorsque vous cliquerez sur suivant, l'installateur lancera automatiquement mingw-get en lui passant les options relatives aux parties que vous aurez séletionnées.

Mingw-get téléchargera alors l'ensemble des archives nécessaires et les décompressera dans son dossier d'installation.


III-A-3-c. Derniers préparatifs
A ce stade, vous disposez de l'ensemble des outils nécessaires pour envisager la compilation de Gcc.

Cependant, mingw-get aura tout installé dans son répertoire racine, ce qui vous donnera une arborescence proche de

temp
|    |->bin                        Gcc et binutils se trouvent ici
|    |->include                    Les fichiers d'en-tête de gcc se trouvent ici
|    |->lib                        Les bibliothèques statiques
|    |->msys         
|    |    |->0.1                   dossier connu pour être / sous MSYS
|    |    |    |->home
|    |    |    |    |->votre nom   dossier connu pour être ~ sous MSYS
|    |                             il s'agit de votre "dossier personnel" sous
|    |                             linux
|    |->var            dossier contenant essentiellement les fichiers utilisés
                       et récupérés par mingw-get
Cela peut être tout à fait satisfaisant si vous ne souhaitez pas garder msys après avoir compilé Gcc (entre autres si vous n'envisager pas d'utiliser les autotools pour générer des scripts de configuration et de compilaton).

Lorsque la compilation sera terminée, vous pourrez en effet décider de supprimer purement et simplement l'ensemble du contenu de temp sans vous poser de question.

Cependant, si vous souhaitez garder msys "sous la main" après avoir supprimé cette version temporaire de MinGW, je vous conseille de faire remonter le dossier msys d'un cran (pour le placer en racine de votre disque dur).

Si vous avez une ligne de commandes ouvertes (par exemple celle que vous venez d'utiliser pour lancer mingw-get), vous pouvez le faire rapidement en lançant la commande.

c:\temp move c:\temp\msys c:\
warning Si vous effectuez ce déplacement et que vous souhaitez par la suite invoquer à nouveau mingw-get pour ajouter des outils supplémentaires à MSYS, ce dernier les placera dans le dossier qu'il considère comme étant le dossiser d'installation de MSYS, en l'occurrence c:\temp\msys.  Vous devrez donc veiller à déplacer ces fichiers dans le dossier réel dans lequel se trouvent les fichiers relatifs à MSYS.
Je considérerai par la suite que le dossier msys se trouve bel et bien à la racine du disque C

info Si vous avez utilisé l'installateur graphique, le raccourcis placé dans votre menu démarrer deviendra invalide du fait du déplacement que nous venons d'effectuer.  N'oubliez pas de mettre la cible de celui-ci à jour cliquant droit dessus puis en sélectionnant "propriétés"
idea Si vous n'avez pas utilisé l'installateur graphique mais que vous avez effectué une installation complètement manuelle ou que vous avez utilisé mingw-get en ligne de commande, vous pouvez créer un raccourci vers c:\msys\0.1\msys.bat sur le bureau en cliquant droit dessus puis en sélectionnant "envoyer vers-> Bureau (créer un raccourcis)"
Vous pouvez bien entendu également utiliser l'explorateur windows si vous le préférez.

Avant de lancer MSYS, nous allons nous assurer une dernière fois que tout est prêt:

Si vous n'avez pas encore créé un dossier MinGW à la racine de c:\, c'est le moment de le faire.

Linux utilise un fichier nommé fstab (File System TABle) qui nous sera très utile.

dans le dossier c:/msys/1.0/etc, vous en trouverez un exemple nommé fstab.sample. Nous allons nous en servir.

Comme il s'agit d'un simple fichier texte, vous pouvez demander à l'ouvrir avec n'importe quel éditeur de texte que vous appréciez. Gardez cependant en tête le fait que c'est un fichier créé sous linux... Cela signifie, entre autre, que les caractères de retour à la ligne sont représentés sous la forme CR, alors que sous windows, on utilise généralement la forme CRLF... Le résultat en est que, si votre éditeur de texte ne comprend pas cette représentation, vous verrez l'ensemble du texte sur une seule ligne, avec une série de carrés qui auraient dû être considérés comme des sauts de ligne.

Au pire, vous pouvez toujours décider d'utiliser WordPad (l'éditeur de texte RTF installé d'origine sous windows), qui vous le présentera de manière correcte.
contenu de fstab.sample

#fstab.sample
#This is a sample file for /etc/fstab.
#Currently /etc/fstab is only read during dll initialization.
#I will eventually watch the directory for changes and reread the file.
#The line format is simple in that you give the Win32 path, followed by one or
#more space or tab delimiter, followed by the mount point.  Mount points in 
#typical UNIX environments must be a physical name on a drive before it can 
#actually be used as a mount point.  In this implementation the "must exist" 
#requirement isn't enforced, however, it will be an aide to such programs as 
#find and readline's tab completion if it does exist.

#You can use a # as the first character on the line as a comment indicator.
#Blank lines are ignored.

#Win32_Path		Mount_Point
c:/mingw		/mingw
c:/ActiveState/perl	/perl
Comme vous l'aurez surement remarqué, les lignes commençant par un # sont considérées comme des commentaires.

La ligne qui nous importe surtout est la ligne

c:/mingw		/mingw
Il faut veiller à ce que la première partie (c:/mingw) corresponde au dossier que vous avez prévu pour l'installation de la version compilée par vos soins.

Si vous disposez de perl, vous pouvez modifier la dernière ligne du fichier (celle qui commence par c:/ActivePerl/perl) pour lui permettre de refléter le dossier dans lequel perl est installé. Si vous n'avez pas perl, car ce n'est pas obligatoire pour notre usage, vous pouvez commenter la ligne en plaçant un # à son début.

Il ne vous reste plus qu'à enregistrer les modifications en renommant le fichier de fstab.sample en fstab (dans le dossier c:\msys\1.0\etc).

warning Vérifiez bien que windows ne vous rajoute pas l'extension .txt, car, sinon, il ne sera pas pris en compte

Si c'est le cas, renommez le en supprimant l'extension et acceptez l'avertissement que windows ne manquera pas de vous donner.
info Si vous avez utilisé l'installateur graphique, mingw-get aura automatiquement créé le fichier fstab, mais en utilisant son dossier d'installation par défaut.

Il est préférable, pour la facilité, de modifier le fichier fstab comme indiqué plus haut.
Vérifiez enfin la présence d'un dossier nommé mingw dans c:\msys\1.0 et créez le en cas de besoin.

Ce dossier permettra à MSYS de faire effectivement le lien entre ce qu'il identifiera comme /mingw et le dossier réel de destination: c:\MinGW


III-B. Premiers contacts


III-B-1. La console sous linux

Ceux qui se sont déjà frottés à linux, ou au monde Unix en général peuvent passer cette sous-section sans crainte, rien de nouveau n'apparaîtra dans ces lignes.

Pour les autres, ne vous en faîtes pas, il n'est nullement dans mes intentions de vous donner un cours complet sur linux - il faudrait plusieurs tutoriaux pour mener ce projet à terme - et ce n'est sûrement pas le but de celui-ci.

Le but de cette sous-section est, tout simplement, de vous signaler quelques différence notables entre ce que vous connaissez des commandes "DOS" et leur équivalents linux.


III-B-2. Bienvenue sous linux

Il est maintenant temps de lancer MSYS et d'entrer pour la première fois sous cet environnement

Vous obtiendrez une console ressemblant à

Cette console vous fournit une quantité non négligeable d'informations qui sous la forme de

 UserName@server ~
$
info MSYS ne connait pas la commande su, et ne dispose d'ailleurs d'aucun des fichiers de gestion de droits que l'on retrouve habituellement sous linux (/etc/passwd, /etc/group...). Il est donc totalement impossible d'envisager de se loguer en tant que "root", mais on dispose malgré tout de l'ensemble des droits. (quand on vous dit que c'est un système minimal :D)

III-B-3. Créer les dossiers de travail

Par facilité, nous allons créer un dossier dans lequel se feront toutes les compilations et les différents dossiers de compilation avec la commande

$ mkdir -p build/binutils build/w32api build/mingwrt build/gcc
La commande mkdir permet, tout comme avec l'invite de commandes sous windows, de créer les dossiers dont les noms sont donnés.  L'option p force à la création des dossiers parents si ceux-ci n'existent pas.

En effet, la plupart des outils supportent difficilement d'être compilés directement dans le dossier dans lequel se trouvent leurs sources. Cela a aussi l'avantage de laisser le dossier dans lequel se trouvent les sources "en l'état", et donc d'éviter des manipulations hasardeuses si on veut reprendre les choses depuis le début.


III-B-4. L'arborescence finale

A ce stade, je considérerai que vous disposez d'une arborescence ressemblant à ceci:

c:
|    |->downloads                        <- dossier de téléchargements
|    |->MinGW                            <- dossier de destination finale
|    |->msys                             <-dossiers d'installation de MSYS
|    |    |->1.0                         <- dossier connu comme étant "/" sous MSYS
|    |    |    |->bin         
|    |    |    |->etc                
|    |    |    |->lib       
|    |    |    ...          
|    |    |    |->home
|    |    |    |    |->votre nom         <- votre dossier personnel "~" sous MSYS
|    |    |    |    |    |->build     
|    |    |    |    |        |->binutils <- dossier de compilation pour binutils
|    |    |    |    |        |->gcc      <- dossier de compilation pour Gcc
|    |    |    |    |        |->mingwrt  <- dossier de compilation pour MinGW Runtime
|    |    |    |    |        |->w32api   <- dossier de compilation pour W32-api
|    |->temp                             <- dossier de l'installation temporaire
|    |    |->bin
|    |    |->etc
|    |    |->lib
|    |    |->...

III-B-5. Convention pour les codes

Une série d'instructions seront présentées dans les lignes suivantes.

Afin d'éviter toute confusion, il me semble intéressant de présenter la convention que j'ai utilisée :

Une commande commence par $. Ce $ représente l'invite de commande et ne doit pas être écrit.

$ une ligne de commande
Si une commande est écrite sur plusieurs lignes, chaque ligne termine par un \ qui permet à la console de savoir que la ligne continue plus loin. La ligne suivante commence alors par un >.

$ une commande \
> sur plusieurs lignes
Vous pouvez décider de ne pas tenir compte de ce signe, et continuer sur la même ligne, l'interpréteur de commande passera automatiquement à la ligne en cas de besoin.

Cependant, si vous décidez de passer à la ligne (par appuis sur la touche <Enter>) vous devez mettre ce symbole avant le passage à la ligne.

info En cas de commande multiligne, vous ne pourrez vous déplacer que sur la dernière ligne de celle-ci.

III-B-6. Configurer les chemins d'accès

Afin de pouvoir utiliser notre installation temporaire de GCC, il y a lieu de configurer c:\temp\bin comme étant un chemin dans lequel aller chercher les exécutables.

Sous linux, la variable qui permet à la console de retrouver les dossiers dans lesquels se trouvent les exécutable est la variable PATH.

Nous pouvons donc rajouter n'importe quel dossier à cette variable avec la commande

$ PATH=/temp/bin:$PATH
info Ceux qui ont l'habitude de l'invite de commande sous windows auront remarqué que le nom de la variable représentant les dossiers dans lesquels le système va chercher les exécutables est identique.  Les différences essentielles sont que, sous windows, les noms de variables sont entourés de symbole '%' alors qu'ils sont, simplement, précédés du symbole '$' sous linux et dans le fait que le séparateur pour cette variable est le point virgule ';' sous windows et les deux points ':' sous linux
Vous pourrez ensuite vérifier si vous ne vous êtes pas trompé en invoquant la commande

$ gcc -v
qui devrait vous sortir quelque chose ressemblant à

Using build-in specs.
COLLECT_GCC=c:\temp\bin\gcc.exe
COLLECT_LTO_WRAPPER=/temp/bin/../libexec/gcc/mingw32/3.4.5/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.5.0 --enable-languages:c,c++,ada,fortran,objc,obj-c++
--disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp
--disable-win32-regstry --enable-libstdcxx-debug 
--enable-version-specific-runtime-libs --disable-werror --build=mingw32 
--prefix=/mingw
Thread model: win32
gcc version 4.5.0 (GCC)
 

Valid XHTML 1.0 TransitionalValid CSS!

Copyright © Philippe Dunski. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique C