Guide de la Compilation de Gcc sous windows avec MinGW
Date de publication : 22/09/2007 , Date de mise à jour : 05/09/2010
I. Introduction
I-A. Gcc, qu'est-ce que c'est?
I-B. MinGW, qu'est-ce que c'est?
I-C. GNU..., mais c'est linux?
I-D. Pourquoi compiler les sources?
I-E. Pourquoi encore compiler en 32bits?
I-F. Pourquoi MinGW et non cygwin?
I-G. mingw-get : le nouvel installateur
I. Introduction
La version originale de cette article est parue en 2007 et sert de base à d'autres articles orientés,
entres autres, sur la création d'un compilateur croisé.
Elle a en outre été reprise dans certains cours et tutoriels.
Depuis la première version, les techniques ont grandement évolué tant au niveau du développement des
outils dont il est question ici que du fait de la généralisation des générations de processeurs 64bits.
S'il peut paraitre "anachronique" de compiler sciemment un compilateur 32 bits, il était cependant impensable
de supprimer purement et simplement cet article.
Cet article est donc une mise à jour de la version originelle destiné
à prendre cette évolution en compte.
I-A. Gcc, qu'est-ce que c'est?
Gcc est l'acronyme de GNU Compilers Collection. Il s'agit en fait d'une collection qui regroupe des compilateurs
supportant de nombreux langages, tels que le C, le C++, l'ObjectiveC, l'ObjectiveC++, le Treelang
(un langage expérimental dont la principale raison d'être est de servir de support au développement
de GCC), l'Ada, le FORTRAN et même le Java.
Il fournit en outre les différentes bibliothèques standard pour ces langages.
I-B. MinGW, qu'est-ce que c'est?
MinGW est l'acronyme de Minimalist Gcc for Windows.
Le format d'exécutables sous Windows (Portable Executable) est très différent de ceux qui
sont utilisés sous linux. Il faut donc ajouter le support de ce format a Gcc pour qu'il soit capable
de générer des programmes exécutables sous cet OS et de lier des bibliothèques.
Le but du projet est, tout simplement, de fournir cette adaptation de Gcc sous windows.
I-C. GNU..., mais c'est linux?
Effectivement, GNU (Gnu's Not Unix) est principalement associé à linux. Et c'est sans doute ce qui fait
que Gcc évolue si rapidement: En effet, les versions en développement de Gcc apportent déjà le support
d'une partie au moins de la prochaine norme de C++ (C++0x) qui n'est pourtant pas attendue, par
les plus optimistes, avant 2011 ou 2012.
Ce qui explique aussi dans une certaine mesure que les mainteneurs de MinGW aient autant de mal à garder
les versions aussi à jour que ce qui existe sous linux.
I-D. Pourquoi compiler les sources?
Les raisons qui pourraient vous faire décider de compiler les sources de Gcc sont multiples:
Si, au moment d'écrire ces lignes, l'équipe de MinGW propose une version "presque à jour" de Gcc (la
version officielle étant 4.5.1 et la version proposée par MinGW étant la 4.5.0), il arrive souvent
que l'équipe de MinGW tarde à considérer certaines versions comme stable.
Cela peut aller jusqu'à remarquer des différences de versions primaires, MinGW n'ayant pendant tout un
temps proposé que la version 3.4.5 comme version stable alors que Gcc en était déjà aux versions
4.2 et supérieures.
De plus, il est possible de disposer d'un "snapshot" hebdomadaire de la version de développement, et certains
pourraient être intéressés par le fait d'en profiter.
En outre, il faut savoir que les versions binaires de MinGW sont généralement compilées de manière à
être fonctionnelles sur la plupart des processeurs: "au mieux", sous de vieux Pentium II, "au pire"
avec d'antiques 3x86.
Nombreux sont ceux qui pourraient, tout simplement, souhaiter disposer d'un compilateur optimisé pour
l'ordinateur dont ils disposent.
Enfin, à l'heure actuelle, le compilateur fait la part belle aux DLL, qui devront fatalement être fournies
avec vos exécutables afin de vous assurer de leur présence.
Vous pourriez souhaiter effectuer une liaison statique de vos projets, en étant cependant conscient du
"surpoids" que cela peut occasionner pour ceux-ci
I-E. Pourquoi encore compiler en 32bits?
Peut-être vous demandez vous pourquoi il est, encore à l'heure actuelle, nécessaire de compiler son compilateur
en 32 bits plutôt que de créer directement son compilateur croisé ou son compilateur 64 bits.
Je vois, personnellement, deux bonnes raisons pour agir de la sorte:
Primo, il y a encore de nombreux ordinateurs 32bits en circulation. Vous apprécierez peut-être
de pouvoir utiliser la même version de compilateur sur ces machines "d'un autre temps", plutôt que
de devoir revenir à une version de Gcc encore plus ancienne.
Secundo, il est toujours plus facile de compiler un compilateur en limitant le nombre de barrières qu'il
faut passer, et en les passant les unes après les autres.
Il vous sera donc plus facile de commencer par mettre à jour votre compilateur plutôt que de vouloir
passer directement de la version 3.4.5 de Gcc à sa version 4.6.0 en 64bits, avec le support multilib,
ou de compiler la version 4.6.0 comme compilateur croisé pour linux si vous utilisez déjà la dite
version 4.6.0.
I-F. Pourquoi MinGW et non cygwin?
Deux raisons m'ont fait choisir une compilation sous MinGW plutôt que sous cygwin:
La première est que cygwin est un émulateur linux qui fournit un compilateur croisé pour windows, et
qu'il nécessite donc une optique de travail plus "orientée" vers linux. Vous me direz sans doute
que vous devrez de toutes manières passer par un émulateur linux pour le compiler, mais cela pourra
rester votre seule expérience sous cet environnement si vous le souhaitez, alors que vous devriez
y retourner chaque fois que vous voudriez compiler sous cygwin.
La deuxième tient tout simplement au fait que la bibliothèque dynamique cygwin.dll est fournie sous licence
GNU/GPL, et que toute utilisation de cette bibliothèque vous forcerait à... créer des applications
sous licence GNU/GPL.
Bien qu'étant personnellement fort attaché à la licence GNU/GPL, je peux concevoir que ce ne soit pas
le cas de tout le monde. C'est la raison pour laquelle j'ai décidé de fournir un compilateur natif
qui vous permette de choisir votre propre licence selon vos propres goûts en la matière.
I-G. mingw-get : le nouvel installateur
Jusqu'il y a peu, il était relativement facile, en téléchargeant quelques archives à peine, d'obtenir
un système minimaliste parfaitement équilibré et fonctionnel.
Pour des raisons qui ne tiennent qu'à elle, l'équipe de développement de MinGW a décidé de ne plus fournir
de "paquet global" et de séparer strictement tous les différents outils.
La liste des archives à récupérer pour obtenir quelque chose de fonctionnel est de ce fait devenue particulièrement
impressionnante (cf. : la liste des archives).
Afin de permettre de gérer correctement les dépendances, l'équipe a donc mis au point une nouvelle application
permettant de récupérer tout ce qu'il faut : mingw-get.
Copyright © Philippe Dunski.
Aucune reproduction, même partielle, ne peut être faite
de ce site ni 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.