Skip to content

Compiler Boost sous Windows et essai avec CodeBlocks

28 juin 2012

Le but de cet article est de présenter l’installation de la librairie boost en version compilée (pour utiliser boost thread, par exemple) sous windowspour l’utiliser avec Code::Blocks.

On commence par récupérer la dernière version stable (1.49.0 aujourd’hui) à cette adresse : http://www.boost.org/users/download/.

On décompresse l’archive à la racine de C:\boost dans notre exemple. Comme j’utlise Code::Blocks (MinGW), il faut compiler avec ce compilateur qui n’est pas officiellement supporté par Boost.

 

Installation

Il faut que dans la variable d’environnement PATH soit ajouté le chemin vers mingw/bin, par exemple : C:\Program files\codeblocks\mingw\bin, par défaut avec Code::Blocks. Ici la version de GCC est la gcc-mingw-4.5.2.

Ouvrez une fenêtre cmd (Démarrer->Exécuter, tapez cmd). allez dans C:\boost\tools\buid\v2

Exécutez bootstrap.bat, le log doit donner quelque chose de ressemblant à ça :


###
### Using 'mingw' toolset.
###

C:\boost\tools\build\v2\engine>if exist bootstrap rd /S /Q bootstrap

C:\boost\tools\build\v2\engine>md bootstrap

C:\boost\tools\build\v2\engine>gcc -DNT -o bootstrap\jam0.exe  command.c compile.c debug.c execnt.c expand.c filent.c glob.c hash.c hdrmacro.c headers.c jam.c jambase.c jamgram.c lists.c make.c make1.c newstr.c option.c output.c parse.c pathunix.c regexp.c rules.c scan.c search.c subst.c timestamp.c variable.c modules.c strings.c filesys.c builtins.c md5.c pwd.c class.c w32_getreg.c native.c modules/set.c modules/path.c modules/regex.c modules/property-set.c modules/sequence.c modules/order.c

C:\boost\tools\build\v2\engine>.\bootstrap\jam0 -f build.jam --toolset=mingw "--toolset-root=C:\MinGW\ " clean
...found 1 target...
...updating 1 target...
...updated 1 target...

C:\boost\tools\build\v2\engine>.\bootstrap\jam0 -f build.jam --toolset=mingw "--toolset-root=C:\MinGW\ " 
...found 49 targets...
...updating 3 targets...
[MKDIR] bin.ntx86
[COMPILE] bin.ntx86\b2.exe
[COPY] bin.ntx86\bjam.exe
...updated 3 targets...

Enuite, on exécute:

b2 –prefix= »C:\boost » toolset=gcc install

On retourne dans C:\boost et lance :

bin\bjam.exe stage –build-type=complete –build-dir= »C:\boost\build »  –toolset=gcc –stage-dir= »C:\boost » –without-mpi –without-python

bin\b2.exe –prefix-dir= »C:\boost » toolset=gcc

Cette étape est assez longue. On peut vérifiez que les librairies (*.a) sont dans C:\boost\stage\lib. Puis :

bin\b2.exe –prefix-dir= »C:\boost » toolset=gcc install

C’est long aussi.

 

Vérification de l’installation

On choisit un programme exemple donné avec Boost et on va le compiler avec Code::Blocks.

Le programme est un classique hello.cpp:


// Copyright (C) 2001-2003
// William E. Kempf
//
//  Distributed under the Boost Software License, Version 1.0. (See accompanying
//  file LICENSE_1_0.txt or copy at <a href=(<a href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>;<a href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)>

#include <boost/thread/thread.hpp>
#include <iostream>

void helloworld()
{
    std::cout << "Hello World" << std::endl;
}

int main()
{
    boost::thread thrd(&amp;helloworld);
    thrd.join();

return 1;

}

Afin de le faire fonctionner ajouter avant l’inclusion de <boost/thread/thread.hpp>:

#ifdef WIN32
#define BOOST_THREAD_USE_LIB
#endif

Dans Project -> Build Options, sous l’onglet Compiler settings et sous-onglet Oher options, mettre :
-fexceptions
-I C:\boost
-lboost

Image pour Compiler settings

Compiler settings

Puis dans l’onglet Linker Settings, mettre :

-L C:\boost\lib
-lboost_thread-mgw45-mt-1_49

Le nom de l’inclusion lboost_thread peut changer selon la version de votre compilateur. Pour cela vérifiez la librairie dans C:\boost\lib (ici libboost_thread-mgw45-mt-1_49.a).

Image Linker Settings

Linker Settings

 Votre code doit compiler sans erreurs ni warning.

 

EDIT :

J’ai trouvé un bon tutoriel pour débuter avec les threads et les mutexs sous Boost (c’est en anglais):

http://www.drdobbs.com/cpp/the-boostthreads-library/184401518?pgno=1

Si vous en avez d’autres, n’hésitez pas à les donner dans les commentaires.

2 commentaires leave one →
  1. Anonymous permalink
    17 avril 2013 22 h 23 mi

    Merci, je teste ça🙂

  2. Loy permalink
    4 juillet 2014 12 h 45 mi

    Bonjour !
    Tout d’abord, merci des diverses indications données par votre article🙂

    Néanmoins, je pense qu’il serait de bon ton de le dépoussiérer, car la technique ne fonctionne plus sous boost 1.55 .
    Désormais, certaines options sont obsolètes (enfin ont changées) et un bug dans v2/ingine/build.bat empèche de générer correctement à la 1ère étape. Donc :

    Il faut préciser manuellement dans le fichier (si, comme moi, on préfère la force brute) la variable « BOOST_JAM_TOOLSET_ROOT=C:\MinGW\ », que j’ai set dans le :Start , avant la ligne : set BOOST_JAM_TOOLSET=%1

    Après, tout fonctionne très bien si on lance le bootstrap.bat depuis la racine de boost (et non dans build). Ne pas me demander pourquoi, les deux fichiers se répondent.

    Les options telles que « –without-python » sont à préciser, il me semble, en options du bootstrap.bat. Personnellement, j’ai pas tenté de le préciser, je voulais déjà réussir à compiler :p.

    Une fois le bootstrap exécuté, ma liste de commande est celle-ci :
    b2 toolset=gcc
    b2 toolset=gcc install

    par défaut le répertoire dest est « C:\boost »

    N.B : penser à utiliser -j # avec # nombre de thread à créer en fonction du nombre de coeur de votre machine :p, ça raccourcis vachement la compilation.

    Ensuite, au niveau des tests, il faut linker system aussi, le path est légèrement différent et les noms des .a aussi (boost_libName_mgw48-mt-1_55 dans mon cas)

    Je pense avoir fait le tour. En tout cas merci, car les indications m’ont permis de compiler efficacement🙂.

    Cordialement,
    Loy

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 :