Introduction

C++ étant un langage de programmation très proche de la machine il est possible grace à lui de faire des programmes très puissants et très optimisés utilisant toutes les possibilités de la machine sur laquelle sont exécutés ces programmes. L’inconvénient majeur du langage C++ et des librairies standard C et C++ est le manque de fonctions haut niveau telles que celles fournies par l’API Java ou des langages orientés haut niveau comme le Python. Bienqu’il existe beaucoup moins de librairies que pour le Java (telles que les apache commons) il existe quelques trésors du net pour combler ce manque. Un de ces trésors est l’ensemble des librairires Boost.

Êtes-vous concernés ?

Les librairies Boost sont :

  • Des librairies d’abstraction dans divers domaines (Réseau, Multithreading, …) en C++.
  • Des librairies portables et génériques (the C++ STL way !).
  • Compatibles avec Windows, MacOS, Unix, GNU/Linux (Attention, ce tutoriel décrit l’installation sur Windows avec MinGW uniquement).

Les librairies Boost ne sont pas :

  • Des librairies pour faire des interfaces graphique (pour cela, utilisez plutôt Qt, WxWidgets, RAD C++ GUI Library…).
  • Des composants spécifiques Windows (COM, ATL, ActiveX, .NET …), cela dit rien ne vous empêche d’utiliser Boost pour créer vos propres composants spécifiques Windows.

Boost C++

Les librairires Boost sont écrite dans l’esprit de la C++ STL, c’est ainsi qu’elles proposent une multitude de fonctions qui jusque là manquait au Standard C++ (ex : Regexp, Communication réseau, Threads). Certaines des librairies seront peut-être introduites dans le futur standard C++0x.

Dans l’esprit les librairies Boost rappellent beaucoup certaines des librairies et classes du Java (ex : Iterateurs), mais certaines fonctionnalités sont complètement différente ce que le Java peut proposer (types variants, transtypage intelligent…)

Un des grands intérêts à mes yeux de cet ensemble de librairies est le fait qu’elles apportent beaucoup de fonction haut niveau pas forcément aisées à coder en C++ (ex : Communication réseau) et aussi qu’elles soient portable entre différentes systèmes (MacOS, Windows, *Nix). Ainsi le codage d’un programme multi-plateformes utilisant par exemple des fonctions réseau devient beaucoup plus simple.

De plus les librairies Boost sont relative connues et reconnues dans l’univers de la programmation C++.

Pré requis

Cette installation nécessite la présence du système MinGW installé tel qu’il est présenté dans mon précédent tutoriel Installer MinGW, ou comment faire du gcc sous Windows.

EDIT [15/02/2009] : Concernant la dernière version à ce jour de Boost (1.38), je l’ai testée avec MinGW-GCC 4.3.0 alpha.
Attention cependant car j’ai été amené à corriger 2 anomalies concernant l’installation de MinGW que j’avais choisie pour pouvoir  compiler correctement Boost avec cette version de MinGW-GCC.

Installation de Boost

C’est ici que tout se complique, en effet Boost ne supporte pas officiellement MinGW parmi les environnements de compilation qu’elle recommande, cependant la doc de Boost parle du cas d’utilisation de MinGW (et Cygwin) sous Windows tout en restant plutôt floue sur les démarches d’installation sur ces systèmes (contrairement à l’installation avec Visual Studio qui propose un installeur automatisé …).

Mais rassurez-vous après un peu de temps et quelques goutes de sueurs, j’ai trouvé comment installer Boost sous Windows avec MinGW !

Détails sur l’installation

Il faut savoir que la grande majorité des librairies de Boost ne nécessitent aucune installation à proprement dit, il suffit de télécharger et d’inclure les headers pour pouvoir les utiliser.

Cependant certaines fonctions très pratiques telles que Boost.Program_options (Gestion des options de l’invite de commande), ou Boost.Asio (Communication réseau) nécessitent une compilation.

L’installation que je vous propose ici vous permettra d’utiliser les librairies de façon statique (avec des fichiers .a) ou dynamique (avec des .dll).

Toutes les librairies ne sont pas gérées par cette installation (ex : Boost.Python), et des options de certaines librairies sont manquantes (ex : Support Unicode dans Boost.Regex) car elles n’entrent pas en compte dans le cadre d’une installation ‘standard’ de l’ensemble des librairies Boost. Cependant, si vous avez vraiment besoin de ces librairies, il est possible de les ajouter. Pour cela veuillez vous référer à la documentation de Boost, et éventuellement aux message d’avertissements générés lors d’une intallation standard.

Téléchargement

Pour pouvoir installer et utiliser Boost 2 packages sont nécessaires, les librairies Boost et l’utilitaire de compilation bjam (equivalent de make). Vous pouvez retrouver ces fichiers à partir du site officiel de Boost : http://www.boost.org/users/download/

La version de Boost que j’utilise à l’heure actuelle est 1.36.0 (.7z), la version de bjam importe peu, la dernière 3.1.16 fera l’affaire. Concernant Bjam il est important de télécharger le fichier se terminant par -ntx86 car cela correspond à l’architecture présente sous windows xp.

EDIT [15/02/2009] : Comme décrit plus haut, j’ai testé la dernière version de Boost : 1.38.0 et pour bjam : 3.1.17.

Extraction des packages

Choisissez un dossier adapté pour extraire Boost.

Je conseille d’installer Boost dans ce même répertoire, donc choisissez-le avec précaution, en ce qui me concerne, j’ai opté pour un « C:\Boost » qui va très bien.

Nous appellerons ainsi « boost_install » le dossier d’installation de Boost dans la suite du tutoriel.

Une fois le dossier choisi (et créé) extrayez le contenu des deux archive dans ce dossier.

Attention, dans l’archive contenant Boost il y a de fortes chances que tous les fichiers soient contenus dans un sous-dossier particulier (du genre « boost_1_36_0 »). Je conseille fortement de ne pas conserver cette arborescence dans le dosser boost_install. Ainsi, vous trouverez la licence dans le fichier « <boost_install>\LICENSE_1.0.txt » au lieu de « <boost_install>\boost_1_36_0\LICENSE_1_0.txt » (i.e. : « C:\Boost\LICENSE_1.0.txt » au lieu de « C:\Boost\boost_1_36_0\LICENSE_1_0.txt »). Suivez ce conseil uniquement si vous ne souhaitez pas faire cohabiter plusieurs versions de Boost sur un même environnement.

De même pour bjam, l’exécutable a de fortes chances de se trouver dans un sous-dossier (du genre « boost-jam-3.1.16-1-ntx86 »). Il est indispensable de décompresser le fichier bjam.exe dans le dossier boost_install (cela donne par exemple « C:\Boost\bjam.exe »).

Installation avec bjam

Ouvrez une invite de commandes dans le dossier racine où ont été décompressés les fichiers et entrez la commande suivante :

bjam stage --build-type=complete --build-dir="<boost_install>\build" --toolset=gcc --stagedir="<boost_install>"

Si vous avez opté (comme moi) pour « C:\Boost » cela donne :

bjam stage --build-type=complete --build-dir="C:\Boost\build" --toolset=gcc --stagedir="C:\Boost"

Cette commande compilera puis installera l’ensemble des librairies sous forme de librairies dynamiques (.dll) et statiques (.lib) dans « <boost_install>\lib ».

Finitions

Nettoyage

A ce point-là le sous-dossier « build » devrait contenir un sous-dossier « boost » qui lui-même devrait contenir un sous-dossier « bin.v2 » (le nom peut varier suivant les versions).

Ce dossier contient les binaires intermédiaires qui ne sont plus utiles, donc vous pouvez supprimer toute l’arborescence « build » (« C\Boost\build » dans notre exemple) et ainsi gagner quelques Go…

Compatibilité avec gcc (MinGW)

Les librairies statiques créées ont comme extension .lib (par défaut pour Visual Studio).

Cette extension n’est pas reconnue (à l’heure actuelle) par gcc (MinGW) donc vous devez toutes les renommer en .a, si vous ne savez pas comment, tappez l’instruction suivante dans l’invite de commande dans le dosser contenant les librairies (« C:\Boost\lib »)

ren *.lib *.a

Voilà ! vous avez fini l’installation. Si vous avez suivi toutes les étapes en suivant mes recommandations, vous devriez avoir au minimum l’arborescence suivante :

<boost_install>       : Racine de l'installation
<boost_install>\doc   : Documentation des librairies (Page d'acceuil : C:\Boost\doc\html\index.html)
<boost_install>\boost : Headers (.hpp)
<boost_install>\lib   : Librairies statiques (.a) et dynamiques (.dll)

Variantes de l’installation

Pour info une autre possibilité d’installation de Boost avec bjam est la suivante :

Vous pouvez intégrer directement l’installation de Boost dans l’installation de MinGW et ainsi ne pas avoir d’arborescence séparée.

Cela permet de ne pas avoir à spécifier comme chemin d’inclusion (option « -I » de gcc) et de recherche de librairies (option « -L » de gcc) les chemins vers l’arborescence de Boost.

Pour cela si vous avez installé MinGW dans le dossier « C:\MinGW », et décompressé Boost dans « C:\Boost » utilisez la commande suivante :

bjam install --prefix="C:\MinGW" --build-type=complete --build-dir="C:\Boost\build" --toolset=gcc --layout=system

Cela installera les headers de Boost dans « C:\MinGW\include\boost » et les librairies dans « C:\MinGW\include\lib » (Attention à bien renommer les librairies .lib en .a).

L’avantage de cette installation est que vous pouvez ensuite complètement supprimer le dossier original d’extraction de Boost (« C:\Boost » dans notre exemple).

Ceci vous donnera l’installation minimale (sans la documentation malheureusement).

Tester l’installation

Pour tester l’installation nous allons reprendre l’exemple utilisé dans la documentation d’installation de Boost.

Pour cela, créez un nouveau fichier « exemple.cpp » source contenant le code suivant :

#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
    std::string line;
    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );

    while (std::cin)
    {
        std::getline(std::cin, line);
        boost::smatch matches;
        if (boost::regex_match(line, matches, pat))
            std::cout << matches[2] << std::endl;
    }
}

Pour le compiler, utilisez la commande suivante :

g++ exemple.cpp -o exemple.exe -I"<boost_install>" -L"<boost_install>\lib" -lboost_regex-mgw42-mt-d

Avec « C:\Boost » comme dossier d’installation, cela donne :

g++ exemple.cpp -o exemple.exe -I"C:\Boost" -L"C:\Boost\lib" -lboost_regex-mgw42-mt-d

Attention, selon la version de MingGW utilisée et le type d’installation, l’option -lboost_regex-mgw42-mt-d peut varier. Pour trouver la bonne syntaxe, trouvez dans le répertoire « <boost_install>\lib » un fichier commençant par « libboost_regex- » et finissant par « -mt-d.a », puis pour avoir la syntaxe exacte, remplacez « lib » par « -l » et enlevez « .a« . Par exemple pour « libboost_regex-mgw42-mt-d.a« , cela donne « -lboost_regex-mgw42-mt-d »

Ensuite créez un fichier « mail.txt » contenant le texte suivant :

To: George Shmidlap
From: Rita Marlowe
Subject: Will Success Spoil Rock Hunter?
---
See subject.

Enfin entrez la commande suivante :

exemple.exe < mail.txt

Et vous devriez voir apparaître à l’écran :

Will Success Spoil Rock Hunter?

Conclusion

Avec cette installation vous allez pouvoir profiter des excellentes librairies Boost qui sont utilisées et reconnues par beaucoup de développeurs en C++.

Ces libraires permettent de gagner beaucoup de temps car elles répondent à des problématiques qui hantent tout développeur (gestion des threads, dates, expression régulières…) et de façon portable et générique, c’est en ce qui me concerne le gros plus de cet ensemble de librairies.

N’hésitez pas à utiliser la documentation fournie lors de vos développements. Personnellement je regrette qu’elle ne soit pas plus détaillées, surtout en ce qui concerne les docs référence des objets et fonctions, cela dit, les tutoriaux sont très instructifs, très bien faits et permettent de bien comprendre le fonctionnement des librairies. Personnellement j’utilise surtout Boost.Program_options et Boost.Asio, mais aussi Boost.Bind, et les shared_pointers qui sont très pratiques.

J’ai pu tester et utiliser cette installation avec Eclipse 3.3 et 3.4 avec respectivement CDT 4 et CDT 5. Cela demande un peu de configuration (chemins d’inclusions et librairies linkées) mais c’est possible !

18 Responses to “Installer Boost sous Windows avec MinGW”

  1. Marine Says:

    Bonjour,
    J’essaie de l’installer exactement comme tu le dis mais je n’y arrive pas :s j’ai demandé qu’on essaie mais sa marche pas ossi :s et j’ai besoin donc si tu pourrais m’y aidé merci d’avance :d.

  2. superbob56 Says:

    En ce qui me concerne l’installation décrite sur cette page fonctionne très bien, et sans information supplémentaire sur les problèmes que tu rencontre je ne peux pas t’aider …
    Pour information je suis en train de tester des nouvelles versions (Boost 1.38 avec MinGW-GCC 4.3 alpha). Je suis en ce moment en train de compiler Boost en utilisant la même démarche que celle expliquée sur cette page et pour l’instant je n’ai aucun problème.
    Je mettrai à jour ce tutoriel (et celui concernant MinGW) lorsque j’aurai fini ma compil et vérifié que tout fonctionne bien)


  3. […] sur les deux tutoriaux : Installer MinGW, ou comment faire du gcc sous Windows et Installer Boost sous Windows avec MinGW. J’y ai ajouté les nouvelles versions et les instructions nécéssaires pour leur bon […]

  4. Rotulet Says:

    bonjour,
    merci pour le tuto ! Par contre je ne sais pas pourquoi à la fin de la compilation je n’ai pas de lib pour smart_ptr ? peut être que les smart_ptr sont déjà inclus dans une autre lib ?
    j’ai essayé avec le flag –with-smart_ptr mais il me dit qu’il ne connait pas cette lib, il y a pourtant bien le répertoire des sources smart_ptr dans libs … comprends pas😦

    Merci de ton aide !

  5. krys Says:

    Salut,

    J’essaie de compiler Boost 1.44 avec le mingw fournis avec QTCreator 2.1 beta. Mais rien à faire, voila 2 jours que je peine la dessus.

    J’ai fait un « post » la dessus :
    http://forum.qtfr.org/viewtopic.php?pid=75512#p75512

    ce serait vraiment super si tu pouvais m’aider

  6. Jonhy Maxoo Says:

    Bonjour,
    première chose, ce tuto et le tuto sur MinGW sont une vrai mine d’or🙂

    J’ai cela dit un petit problème.
    Lorsque je compile avec des flags tels que -W -Wall, j’ai plein de warnings. J’ai demande a un ami de tester sous linux et il n’a pas ce probleme.

    Est ce que quelqu’un a déjà eu et réussi a régler le soucis ?

    • superbob56 Says:

      Pour être honnête, je ne me souviens plus de s’il y avait des warnings à la compil de Boost sur windows.
      C’est fort probable que oui.
      Il faut bien garder à l’esprit que MinGW-gcc n’est pas officiellement supporté par Boost, Boost supporte officiellement gcc sous linux et ms-vcc sous windows, mais gcc sous windows c’est un peu plus expérimental.

  7. Julien Says:

    Un GRAND merci à toi pour ce tuto sans lequel je serais encore là à galérer pour utiliser boost filesystem !

  8. Rinrynque Says:

    Très bon tuto, en français en plus alors que même en anglais on ne trouve pas plus clair, bravo !
    J’ai eu du mal au niveau de Gcc, bien penser à dfinir la variable Path (et non pas PATH), comme indiqué dans le tuto ou là : http://www.iut-arles.up.univ-mrs.fr/eremy/Aide/InstallationMinGW.html

  9. Trebor Says:

    Bonjour !

    Très bon tutorial, mais petit détail : point de bjam nulle part, no fourni dans boost – il faut peut-être installer quelque-chose en plus avant, bref je suis largué, et c’est frustrant de devoir faire autant d’étapes !!

    Merci pour ce tuto, anyway

  10. Sentier Says:

    Bonjour,
    je travaille avec Windows 8 et Bosst_1_54_0. En suivant les conseils ci-dessus et la doc Boost, je n’arrive à rien.
    Sur .\b2, j’ai très souvent une erreur « cl n’est pas reconnue en tant que commande interne… » et « failed compile-c-c++… »
    Dans mon répertoire C:/boost, j’ai bien une directorie lib qui est créée mais elle est vide.
    Une idée de ce qu’est cette commande cl ?

    Merci

    • superbob56 Says:

      Je n’ai pas actuellement d’environnement pour pouvoir tester cette configuration (Windows 8 + Boost 1.54). Je conseille de bien vérifier que le PATH est correctement défini. Par exemple, vérifier que dans une invite de commandes les commandes de type « gcc » ou « cl » ne renvoient pas d’erreur du style « cl n’est pas reconnue en tant que commande interne ». Je suppose que le répertoire lib restera vide tant que les messages d’erreur ne sont pas « résolus ».
      Pour info et si mes souvenirs sont corrects, « cl » est le linker, c’est le programme qui permet d’assembler les « morceaux » de programmes entre eux, générer les liens vers les bibliothèques et générer un binaire valide pour la plateforme (en-têtes d’exécutable). Il devrait être fournis dans l’installation de MinGW.


Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :