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