Installation de MinGW sous Windows - Minimalist GNU for Windows

Introduction

Qu'il s'agisse de la compilation de SQLite, OpenLDAP ou encore BerkeleyDB sous Windows pour des études ou des développements, MinGW for Windows (Minimalist Gui for Windows) est une excellente solution technique autonome qui évite l'installation de la suite Microsoft Visual Studio avec ses composants annexes multiples. MinGW n'est pas intrusif dans la plateforme Windows (mise à jour de la base de registres etc...) et offre par ailleurs, en plus des compilateurs C, C++, gcc, Ada, Fortran etc..., la plupart des utilitaires Unix vitaux dans un environnement bourne shell comme gawk, awk, sort, comm, sed, grep, find etc... utilitaires qui manquent cruellement sous Windows.

Ce tutoriel présente l'installation manuelle en lignes de commandes de MinGW/MSYS for Windows.

MinGW et MSYS

MinGW est un environnement de développement très léger pour créér des applications Windows à partir de sources et présente l'avantage de ne dépendre d'aucune machine virtuelle d'un fournisseur tiers (C Runtime DLL), notamment les DLLs de Microsoft comme par exemple MSVCRT.dll. MinGW ne fournit pas un environnement virtuel pour le déploiement d'applications POSIX sur Microsoft, dans ce contexte, utiliser cygwin qui est une suite bien plus complète.

MinGW est un dérivé plus léger de Cygwin 1.3 et permet de porter la plupart des applications Open Source sur la plateforme MS Windows.

MinGW inclut :

  • Un portage des compilateurs GNU gcc, C, C++, ADA et Fortran.
  • Les utilitaires GNU pour assembler, lier des librairies (DLLs), gérer les archives (assembler, linker, archive manager).
  • Une ligne de commande pour installer MinGW et MSYS.

MSYS (Minimal SYStem) est un interpréteur Bourne Shell (sh) et inclut une sélection de quelques utilitaires Unix indispensables (make, awk, sed, grep...).

Installation

mingw-get, téléchargement du catalogue.

L'archive mingw-get-0.1-mingw32-alpha-5-bin.zip est téléchargée depuis le site sourceforge.net ( mingw-get-0.1-mingw32-alpha-5-bin.zip ), archive décompressée ensuite dans le répertoire C:\mingw (%MINGW_DIR%). Il est recommandé de ne pas utiliser des noms de répertoires contenant des espaces ou autres caractères spéciaux.

Le binaire mingw-get est dans le répertoire %MINGW_DIR%/bin.

Dans une invite de commandes DOS, la variable %MINGW_DIR%/bin est ajoutée dans la variable %PATH% de Windows.

C:\> set MINGW_DIR="C:\mingw"
C:\> set PATH=%MINGW_DIR%\bin;%PATH%

Le binaire mingw-get installe les packages, pour comprendre son utilisation, exécuter ce binaire avec l'option --help :

C:\> mingw-get --helpmingw-get [OPTIONS] ACTION package-spec [package-spec ...]
Manage MinGW and MSYS installations (Command-line user interface).

Options:
  --help, -h      Show this help text
  --version, -V   Show version and licence information

Actions:
  update          Update local copy of repository catalogues
  install         Install new packages
  remove          [not implemented] Remove previously installed packages
  upgrade         [not implemented] Upgrade previously installed packages

Package Specifications:
  [subsystem]-name-[component]:
  msys-bash-doc   The 'doc' component of the bash package for MSYS
  mingw32-gdb     All components of the gdb package for MinGW
See /mingw/var/lib/mingw-get/data/*.xml for possible package names
and the components associated with each.

Le catalogue des packages est contenu dans des fichiers xml dans le répertoire %MINGW_DIR%\var\lib\mingw-get\data\. Le catalogue n'est initialisé qu'au premier appel de la commande mingw-get install

C:\> mingw-get installmingw-get: *** WARNING *** C:\mingw\var/lib/mingw-get/data/profile.xml: user configuration file missing
mingw-get: *** INFO *** C:\mingw\var/lib/mingw-get/data/defaults.xml: trying system default configuration
Load catalogue: C:\mingw\var/lib/mingw-get/data/package-list.xml
Load catalogue: C:\mingw\var/lib/mingw-get/data/mingw32-package-list.xml
Load catalogue: C:\mingw\var/lib/mingw-get/data/mingw32-autoconf.xml
 ...

Parfois des erreurs surviennent dans le chargement des fichiers XML du catalogue :

mingw-get: *** ERROR *** Sync Repository: http://prdownloads.sourceforge.net/mingw/msys-lndir.xml.lzma?download:
download failed
mingw-get: *** WARNING *** Load catalogue: FAILED: C:\mingw\var/lib/mingw-get/data/msys-lndir.xml

Dans ces cas de figure, relancer la commande jusqu'à obtenir un téléchargement réussi pour les catalogues en échec :

C:\> mingw-get install...
Load catalogue: C:\mingw\var/lib/mingw-get/data/msys-lndir.xml
...

mingw-get, installation des compilateurs C, C++, make et gdb

Le compilateur GNU C et ses packages dépendants (mingwrt, w32api et binutils) sont d'abord installés avec l'option gcc:

C:\> mingw-get install gcc > mingw-install-gcc.log 2>&1downloading: w32api-3.15-1-mingw32-dev.tar.lzma: 8192 b
downloading: w32api-3.15-1-mingw32-dev.tar.lzma: 16384 b
...
install: gcc-4.5.0-1-mingw32-lic.tar.lzma
install: mingwrt-3.18-mingw32-dll.tar.gz
...

C'est la version 4.5.0.1 de gcc qui est disponible au cours de l'installation.

Repérer dans le fichier de log toute éventuelle erreur de téléchargement, car comme pour les catalogues, des erreurs de synchronisation peuvent se produire. Dans ce cas de figure relancer l'installation. Les installations peuvent être relancées plusieurs fois de suite sans aucun problème, le mot clé "no change" est notifié lorsque le package est déjà installé :

...
no change: w32api-3.15-1-mingw32-dev.tar.lzma
no change: mingwrt-3.18-mingw32-dev.tar.gz
...

Le compilateur C++ est installé avec l'option g++

C:\> mingw-get install g++ > mingw-install-g++.log 2>&1...
downloading: gcc-c++-4.5.0-1-mingw32-bin.tar.lzma: 5398195 b
...
install: gcc-c++-4.5.0-1-mingw32-bin.tar.lzma

L'utilitaire make est installé avec l'option mingw32-make

C:\> mingw-get install mingw32-make > mingw-install-mingw32-make.log 2>&1...
downloading: make-3.82-3-mingw32-bin.tar.lzma: 213523 b
install: make-3.82-3-mingw32-bin.tar.lzma

Le debogueur GNU gdb est également installé en cas de besoin avec l'option gdb

C:\> mingw-get install gdb > mingw-install-gdb.log 2>&1...
downloading: gdb-7.2-1-mingw32-doc.tar.lzma: 462796 b
install: libexpat-2.0.1-1-mingw32-dll-1.tar.gz
install: gdb-7.2-1-mingw32-bin.tar.lzma
install: gdb-7.2-1-mingw32-doc.tar.lzma

mingw-get, installation de l'environnement shell MSYS et démarrage

L'environnement shell MSYS est installé également avec mingw-get avec l'option msys-base :

C:\> mingw-get install msys-base > mingw-install-msys-base.log 2>&1...
install: libiconv-1.13.1-2-msys-1.0.13-dll-2.tar.lzma
install: libintl-0.17-2-msys-dll-8.tar.lzma
install: coreutils-5.97-3-msys-1.0.13-bin.tar.lzma
install: libregex-1.20090805-2-msys-1.0.13-dll-1.tar.lzma
install: libtermcap-0.20050421_1-2-msys-1.0.13-dll-0.tar.lzma
install: less-436-2-msys-1.0.13-bin.tar.lzma
install: grep-2.5.4-2-msys-1.0.13-bin.tar.lzma
install: diffutils-2.8.7.20071206cvs-3-msys-1.0.13-bin.tar.lzma
install: sed-4.2.1-2-msys-1.0.13-bin.tar.lzma
install: gawk-3.1.7-2-msys-1.0.13-bin.tar.lzma
install: libpopt-1.15-2-msys-1.0.13-dll-0.tar.lzma
install: zlib-1.2.3-2-msys-1.0.13-dll.tar.lzma
install: libmagic-5.04-1-msys-1.0.13-dll-1.tar.lzma
install: liblzma-4.999.9beta_20100401-1-msys-1.0.13-dll-1.tar.gz
install: xz-4.999.9beta_20100401-1-msys-1.0.13-bin.tar.gz
install: texinfo-4.13a-2-msys-1.0.13-bin.tar.lzma
install: tar-1.23-1-msys-1.0.13-bin.tar.lzma
install: make-3.81-3-msys-1.0.13-bin.tar.lzma
install: gzip-1.3.12-2-msys-1.0.13-bin.tar.lzma
install: file-5.04-1-msys-1.0.13-bin.tar.lzma
install: findutils-4.4.2-2-msys-1.0.13-bin.tar.lzma
install: cygutils-dos2unix-1.3.4-4-msys-1.0.13-bin.tar.lzma
install: msysCORE-1.0.16-1-msys-1.0.16-ext.tar.lzma
install: bzip2-1.0.5-2-msys-1.0.13-bin.tar.lzma
install: bash-3.1.17-4-msys-1.0.16-bin.tar.lzma
install: msys-base-2010080900-msys-bin.meta

Ce package installe les utilitaires Unix comme sed, gawk, awk, find, grep, gzip, tar etc... Par défaut vim (VI meilleur) n'est pas installé dans msys-base, pour installer vim :

C:\> mingw-get install msys-vim > mingw-install-msys-vim.log 2>&1...
install: vim-7.2-2-msys-1.0.13-bin.tar.lzma
 ...

L'environnement shell est installé dans le répertoire %MINGW_DIR%/msys/1.0. Pour démarrer l'environnement Shell MSYS, exécuter le script msys.bat localisé dans %MINGW_DIR%/msys/1.0. Un environnement Unix Like est alors à disposition en mode console.

$ cd /
$ ls -ltotal 47

drwxr-xr-x         2 ADMIN Administrators             0 Nov 26 19:22 bin
drwxr-xr-x         2 ADMIN Administrators             0 Nov 26 19:37 etc
drwxr-xr-x         3 ADMIN Administrators             0 Nov 26 19:14 home
-rw-r--r--         1 ADMIN Administrators          2238 Jul 11  2009 m.ico
-rwxr-xr-x         1 ADMIN Administrators          7167 Sep 29 02:48 msys.bat
-rw-r--r--         1 ADMIN Administrators         37758 Jul 11  2009 msys.ico
drwxr-xr-x         2 ADMIN Administrators             0 Nov 26 19:28 postinstall
drwxr-xr-x         3 ADMIN Administrators             0 Nov 26 19:13 sbin
drwxr-xr-x         8 ADMIN Administrators             0 Nov 26 19:22 share

Opérations post-installation, montage de /mingw

Une fois l'environnement MSYS Shell installé et démarré, exécuter le shell /postinstall/pi.sh

$ /postinstall/pi.shThis is a post install process that will try to normalize between
your MinGW install if any as well as your previous MSYS installs
if any.  I don't have any traps as aborts will not hurt anything.
Do you wish to continue with the post install? [yn ] y

Do you have MinGW installed? [yn ] y

Please answer the following in the form of c:/foo/bar.
Where is your MinGW installation? C:/mingw

Creating /etc/fstab with mingw mount bindings.
        Normalizing your MSYS environment.

You have script /bin/cmd

Oh joy, you do not have C:/mingw/bin/make.exe. Keep it that way.

Le script shell pi.sh créé le point de montage /mingw dans l'environnement MSYS Shell, point de montage qui correspond à %MINGW_DIR%. Les points de montage sont évoqués ultérieurement.

Le fichier /etc/profile, la variable PATH

Le fichier /etc/profile définit les variables $MSYSTEM, $HOME, $PATH, $PS1 etc... lors du lancement de MSYS Shell, il peut être modifié à souhait en fonction de ses préférences. Un seul élément à ne pas supprimer, la mise à jour de la variable $PATH avec l'ajout de .:/usr/local/bin:/bin:/mingw/bin

 export PATH=".:/usr/local/bin:/bin:/mingw/bin:$PATH"

Montage de répertoires Windows dans l'environnement MSYS Shell : fstab

Le fichier /etc/fstab ou la commande mount permettent dès lors de monter des répertoires Windows déjà existants dans l'environnement MSYS Shell, ainsi il est possible d'utiliser les précieux utilitaires Unix (sed, awk, find...) sur des répertoires Windows.

Pour monter le répertoire D:\intranet\sqlpac dans l'environnement MSYS Shell avec comme point de montage /intranet :

$ mount D:\\intranet\\sqlpac /intranet

La commande mount met à jour automatiquement le fichier /etc/fstab, fichier qui stocke les points de montage :

$ cat /etc/fstabC:/mingw /mingw
D:/intranet/sqlpac      /intranet

La commande umount quant à elle démonte un point de montage. La commande umount retire également automatiquement les entrées dans /etc/fstab.

Le fichier /etc/fstab peut être également directement édité avec vim. Les montages et démontages sont réalisés automatiquement lors de l'enregistrement de ce fichier.

Validation de l'installation, tests de compilations : hello.exe

Pour valider très rapidement et sommairement la plateforme, créer une simple application console, par exemple un programme C qui affiche hello :

$ cd $HOME
vim hello.c
#include <stdio.h>

int main(int argc, char **argv)
{
   printf ("Hello\n");
   return (0);
}

Appeler gcc pour compiler le programme c en fichier objet hello.o :

$ gcc -c hello.c

L'exécutable hello.exe est généré également avec gcc :

$ gcc -o hello hello.o
$ helloHello