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 --help
mingw-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 install
mingw-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>&1
downloading: 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 -l
total 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.sh
This 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/fstab
C:/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 $ hello
Hello