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


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.

 

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