III. 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.
III-A. Installer 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 mirroirs mis à disposition par Sourceforge.
Le plus facile est sans doute de choisir l'installateur (msys.exe) et de garder les réglages par défaut.
Il s'installera par défaut sur c:\msys, et cela nous ira très bien.
Pour la facilité, je considèrerai par la suite que l'installation de msys a été faite dans c:\msys.
Une fois l'installation finie (cela ne prend que peu de temps), il vous proposera de procéder à la configuration post-insallation, acceptez sans crainte:
Il vous demandera alors si vous avez MinGW installé.
Bien que nous venions d'installer MinGW dans le dossiers c:\gcc, le but de cette question est en fait de faire correspondre un dossier qui sera accessible sous MSYS, et que nous utiliserons comme cible de notre nouvelle installation, au dossier où MinGW serait installé. Comme cela pourrait provoquer quelques conflits pour la suite des événements, répondons non.
Le script se fendra alors d'un petit conseil concernant l'installation de MinGW:
Et attendra que vous enfonciez la touche <ENTER> avant de vérifier la présence de quelques fonctions importante pour Msys.
Il terminera sur un conseil concernant miwngw32-make, auquel on peut ne pas être trop attentif pour l'instant, étant donné que notre but est de créer une installation "from scratch" de GCC. Deux appuis supplémentaires sur la touche <ENTER> permettront de quitter le script de post installation.
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.
- Ainsi, les paramètres passés au commandes sous DOS sont précédées du /, alors qu'ils sont précédés d'un trait d'union - pour les versions courtes ou de deux traits d'union -- pour les versions longues.
- La très grosse majorité des commandes contient une aide en ligne. Pour y arriver, il suffit de faire suivre le nom de la commande par --help (ou -h si vous êtes fainéants)
- La console linux dispose d'un système d'auto-completion très efficace; il permet au choix de completer le nom d'un dossier, d'un fichier, ou d'une commande. Pour en profiter, il suffit d'apppuyer sur la touche <tabulation>. Le premier appuis dessus fera compléter le mot jusqu'à ce qu'il y ait "conflit": dans le cas de deux mots commençant par les mêmes lettres, la complétion s'arrêtera juste avant la première lettre qui n'est plus identique. Le deuxième appuis affichera la liste des (dossiers, fichiers, instructions) qui correspond à ce qui a déjà été introduit.
- Linux utilise le "slash"(/) comme séparateur entre les dossiers et les fichiers et supporte "relativement mal" les espaces dans les noms. Il est donc "de bon ton" d'essayer autant que possible de les éviter. Pour accéder à un dossier ou à un fichier contenant des espaces, il faut faire précéder chaque espace d'un "back-slash" (\). Ceci dit, l'auto-complétion le rajoute automatiquement.
-
La notion de "disque logique" est inconnue sous linux.
Les partitions sont tout simplement rattachées à des dossiers qui se trouvent dans l'arborescence partant de la racine du système.
Et la racine du système ne se trouve pas forcément... à la racine d'une partition.
Ainsi, quand vous aurez lancé MSYS, la racine du système (/) se trouvera en réalité dans c:\msys\1.0, et si vous voulez quelque chose qui se trouve "au dessus" de c:\msys\1.0, il faudra y accéder au départ de / (ex: /c/mingw, /c/downloads) - Alors que windows se base sur l'extension d'un fichier pour déterminer si c'est un exécutable ou non, linux regarde un bit particulier qui lui indique qu'il s'agit d'un exécutable. Cepedant, étant donné que MSYS doit fonctionner sous windows, il est également sensible aux extensions exe et autres.
- Linux est "sensible à la casse" en ce qui concerne les noms de dossiers, de fichiers et de commandes. Ainsi, si vous souhaitez accéder au dossier c:\Program Files, il faudra écrire un P majuscule et non un p minuscule, autrement, même l'auto-complétion ne trouvera pas le dossier.
-
Il y a une série d'instructions qui diffèrent sous DOS et sous linux.
Il y a d'ailleurs une série d'instructions qui sont propres à linux. La liste des différences étant relativement longue, et comme vous n'aurez sans doute pas besoin d'une bonne partie d'entre elles, je me contenterai de vous expliquer les commandes nécessaires en temps utiles. -
Linux dispose d'un historique des commandes particulièremnt efficace.
Vous pouvez naviguer dans cette historique à l'aide des fleches de directions
"haut" et "bas".
Il n'y a aucune limite quant au nombre d'instructions de cette historique, et quand bien même vous quitteriez la console, l'historique est maintenue au prochain lancement.
III-B-2. Derniers préparatifs▲
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é 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 saut 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.
#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 permière partie (c:/mingw) corresponde au dossier que vous avez prévu pour l'installation de la verison 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 modification en renommant le fichier de fstab.sample en fstab (dans le dossier c:\msys\1.0\etc).
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.
III-C. Bienvenue sous linux▲
Il est maintenant temps de lancer MSYS et d'entrer pour la première fois sous cet environnement (normalement il aura installé un raccourcis dans le menu démarrer->tous les programmes->MinGW->Msys)
Vous obtiendrez une console ressemblant à
Cette console vous fournit une quantité non négligeable d'informations qui sous la forme de
UserName@server ~
$
- Username représente votre nom d'utilisateur
- server représente le nom du serveur sur lequel vous êtes connecté, et qui est typiquement, ici, le nom de l'ordinateur
- ~ représente le dossier actuel (ce symbole indique que vous êtes dans votre dossier personnel)
- $ indique que vous êtes logué en tant qu'utilisateur simple (si vous aviez été logué en tant qu'administrateur, cela aurait été un #). Le fait que vous travailliez éventuellement avec une session administrateur sous windows n'intervient absolument pas ici, mais, comme les droits accordés à l'utilisateur simple nous suffisent, il n'y a pas lieu de s'inquiéter
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-D. Créer les dossiers de travail▲
Par facilité, nous allons créer un dossier de travail qui contiendra lui-même un dossier dans lequel iront les sources décompressées et un autre dans lequel nous effectuerons les compilations avec la commande
$ mkdir -p /work/build /work/src
En effet, la plupart des outils supportent difficilement d'être compilés directement dans le dossier dans lequel se trouvent leur sources. Cela a aussi l'avantage de laisser le dossier dans lequel se trouve les sources "en l'état", et donc d'éviter des manipulations hasardeuses si on veut reprendre les choses depuis le début.
III-E. Pour ceux qui ont postposé la décompression des outils temporaires▲
Si vous avez décidé d'attendre dêtre sous linux pour décompresser binutils et GCC, c'est le moment où jamais de le faire.
En considérant que vos téléchargements sont placés dans le dossier c:\downloads, cela se fait avec les commandes
$ tar -vxzf /c/downloads/gcc-core-3.4.5-20060117-1.tar.gz -C /c/gcc
$ tar -vxzf /c/downloads/gcc-ada-3.4.5-20060117-1.tar.gz -C /c/gcc
$ tar -vxzf /c/downloads/binutils-2.17.50-20060824-1.tar.gz -C /c/gcc
$ tar -vxzf /c/downloads/mingw32-runtime-3.13.tar.gz -C /c/gcc
$ tar -vxzf /c/downloads/win32api-3.10.tar.gz -C /c/gcc
Comprendre la commande
Tar est un utilitaire permettant de décompresser les archives linux créées avec gzip et bzip2.
Les arguments qui nous intéressent sont
- v verbose: produit une sortie sur console de l'ensemble des fichiers extraits ou ajoutés
- z permet de spécifier le format de l'archive : z pour les archive *tar.gz ou j pour les archives *.tar.bz2
- x indique que l'on veut pratiquer l'extraction, et non l'ajout de document
- f force: indique qu'il faut forcer l'extraction du fichier s'il existe déjà
Enfin, l'argument séparé -C permet de spécifier un chemin de base où effectuer l'extraction (chemins relatifs admis).
III-F. L'arborescence finale▲
A ce stade, je considérerai que vous disposez d'une arborescence ressemblant à ceci:
c:
| downloads <- dossier de téléchargements
| gcc <- dossier de l'installation temporaire
| | bin
| | etc
| | lib
| | ...
| MinGW <- dossier de destination finale
| msys
| | 1.0 <- dossier "racine" de msys
| | | bin :
| | | etc : <-dossiers d'installation de linux
| | | lib :
| | | ... :
| | | work
| | | | build <- dossier de compilation
| | | | src <- dossier contenant les sources décompressées
III-G. 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é:
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 ne commence donc pas par $
$ 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.
MSYS supporte le mécanisme de copier/coller: Pour coller un texte dans la console MSYS, ce qui sera le sens le plus courent que vous utiliserez, cliquez simplement avec le bouton gauche de la souris sur celle-ci en maintenant la touche <majuscule> enfoncée.
De cette manière, il vous suffira de copier les commandes en évitant le $ de l'invite, mais en prenant toutes les lignes si une commande est sur plusieurs lignes, et de les coller directement dans la console.
Vous pourrez alors vous déplacer dans cette commande à l'aide des flèches gauche et droite afin de modifier éventuellement un paramètre.
En cas de commande multiligne, vous ne pourrez vous déplacer que
sur la dernière ligne de celle-ci.
Si le chemin d'accès ne correspond pas, vous aurez simplement
un avertissement spécifiant que la commande n'est pas trouvée,
et vous pouvez donc confirmer la commande par appuis sur la touche
<Enter>.
Si le chemin correspond mais que vous souhaîtez modifier un paramètre,
vous pouvez annuler une commande à tout moment simplement
en appuyant simultanément sur la touche <Ctrl> et sur C.
Vous pourrez alors vous servir de l'historique qui vous présentera
la commande considérée comme étant sur une seule ligne.
III-H. Configurer le PATH▲
Afin de pouvoir utiliser notre installation temporaire de GCC, il y a lieu de configuer c:\gcc\bin comme étant un chemin dans lequel aller chercher les exécutables.
Cela se fait avec la commande
$ PATH=/c/gcc/bin:$PATH
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 à
Reading specs from c:/gcc/bin/../lib/gcc/mingw32/3.4.5/specs
Configured with: ../gcc-3.4.5/configure --with-gcc --with-gnu-ld --with-gnu-as
--target=mingw32 --prefix=/mingw --enable-threads --disable-nls
--enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry
--disable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt
--without-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter
--enable-hash-synchronization --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.5 (mingw special)