Compiler Boost sous Windows et essai avec CodeBlocks
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(&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
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).
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.