web-dev-qa-db-fra.com

Comment utiliser Boost dans Visual Studio 2010

Qu'est-ce qu'une bonne explication étape par étape sur l'utilisation de la bibliothèque Boost dans un projet vide dans Visual Studio?

360
OlimilOops

Alors que la réponse de Nate est déjà assez bonne, je vais développer celle-ci plus spécifiquement pour Visual Studio 2010 comme demandé, et inclure des informations sur la compilation dans les divers composants facultatifs nécessitant une connexion externe. bibliothèques.

Si vous utilisez uniquement des bibliothèques d'en-têtes, il vous suffit de désarchiver le téléchargement accéléré et de configurer les variables d'environnement. L'instruction ci-dessous définit les variables d'environnement pour Visual Studio uniquement, et non pour l'ensemble du système. Notez que vous n'avez qu'à le faire une fois.

  1. Désarchivez la dernière version de boost (1.47.0 au moment de l'écriture) dans un répertoire de votre choix (par exemple, C:\boost_1_47_0).
  2. Créez un nouveau projet vide dans Visual Studio.
  3. Ouvrez le gestionnaire de propriétés et développez l'une des configurations de la plate-forme de votre choix.
  4. Sélectionnez et cliquez avec le bouton droit de la souris sur Microsoft.Cpp.<Platform>.user, puis sélectionnez Properties pour ouvrir la page de propriétés à modifier.
  5. Sélectionnez VC++ Directories à gauche.
  6. Modifiez la section Include Directories pour inclure le chemin d'accès à vos fichiers source boost.
  7. Répétez les étapes 3 à 6 pour différentes plates-formes de votre choix si nécessaire.

Si vous souhaitez utiliser la partie de boost qui nécessite une construction, mais aucune des fonctionnalités nécessitant des dépendances externes, la construire est assez simple.

  1. Désarchivez la dernière version de boost (1.47.0 au moment de l'écriture) dans un répertoire de votre choix (par exemple, C:\boost_1_47_0).
  2. Lancez l'invite de commandes Visual Studio pour la plate-forme de votre choix et accédez à l'emplacement de boost.
  3. Exécutez: bootstrap.bat pour générer b2.exe (nommé précédemment bjam).
  4. Exécuter b2:

    • Win32: b2 --toolset=msvc-10.0 --build-type=complete stage;
    • x64: b2 --toolset=msvc-10.0 --build-type=complete architecture=x86 address-model=64 stage

Allez vous promener/regarder un film ou 2/....

  1. Suivez les étapes 2 à 6 de l'ensemble d'instructions ci-dessus pour définir les variables d'environnement.
  2. Modifiez la section Library Directories pour inclure le chemin d'accès à la sortie de vos bibliothèques boost. (La valeur par défaut pour l'exemple et les instructions ci-dessus serait C:\boost_1_47_0\stage\lib. Renommez et déplacez d'abord le répertoire si vous voulez avoir x86 & x64 côte à côte (comme pour <BOOST_PATH>\lib\x86 & <BOOST_PATH>\lib\x64) .
  3. Répétez les étapes 2 à 6 pour différentes plates-formes de votre choix si nécessaire.

Si vous voulez les composants optionnels, vous avez encore du travail à faire. Ceux-ci sont:

  • Filtres Boost.IOStreams Bzip2
  • Filtres Boost.IOStreams Zlib
  • Boost.MPI
  • Boost.Python
  • Boost.Regex ICU support

Filtres Boost.IOStreams Bzip2:

  1. Désarchivez la dernière version de la bibliothèque bzip2 (version 1.0.6 au moment de l'écriture) dans un répertoire de votre choix (par exemple, C:\bzip2-1.0.6).
  2. Suivez le deuxième ensemble d’instructions ci-dessus pour créer un boost, mais ajoutez l’option -sBZIP2_SOURCE="C:\bzip2-1.0.6" lors de l’exécution de b2 à l’étape 5.

Filtres Boost.IOStreams Zlib

  1. Désarchivez la dernière version de la bibliothèque zlib (1.2.5 au moment de l'écriture) dans un répertoire de votre choix (par exemple, C:\zlib-1.2.5).
  2. Suivez le deuxième ensemble d’instructions ci-dessus pour créer un boost, mais ajoutez l’option -sZLIB_SOURCE="C:\zlib-1.2.5" lors de l’exécution de b2 à l’étape 5.

Boost.MPI

  1. Installez une distribution MPI telle que Microsoft Compute Cluster Pack.
  2. Suivez les étapes 1 à 3 du deuxième ensemble d’instructions ci-dessus pour créer un boost.
  3. Editez le fichier project-config.jam dans le répertoire <BOOST_PATH> résultant de l’exécution de bootstrap. Ajoutez dans une ligne qui lit using mpi ; (notez l'espace avant le ';').
  4. Suivez le reste des étapes du deuxième ensemble d’instructions ci-dessus pour créer un boost. Si la détection automatique de l'installation MPI échoue, vous devez rechercher et modifier le fichier de construction approprié pour rechercher MPI au bon endroit.

Boost.Python

  1. Installez une distribution Python telle que ActivePython d'ActiveState. Assurez-vous que l’installation Python se trouve dans votre PATH.
  2. Pour construire complètement la version 32 bits de la bibliothèque, il faut Python 32 bits, et de la même manière pour la version 64 bits. Si vous avez plusieurs versions installées pour cette raison, vous devrez indiquer à b2 où trouver une version spécifique et à quel moment l'utiliser. Une façon de le faire consiste à éditer le fichier project-config.jam dans le répertoire <BOOST_PATH> résultant de l'exécution de bootstrap. Ajoutez les deux lignes suivantes en ajustant en fonction de vos Python chemins d'installation et versions (notez l'espace avant le ';').

    using python : 2.6 : C:\\Python\\Python26\\python ;

    using python : 2.6 : C:\\Python\\Python26-x64\\python : : : <address-model>64 ;

    Notez que cette spécification Python explicite entraîne actuellement l'échec de la construction de MPI. Vous aurez donc besoin de construire séparément avec et sans spécification pour tout construire si vous construisez également MPI.

  3. Suivez la deuxième série d’instructions ci-dessus pour renforcer votre dynamisme.

Boost.Regex ICU support

  1. Désarchivez la dernière version du fichier source de la bibliothèque ICU4C (version 4.8 au moment de l’écriture) dans un répertoire de votre choix (par exemple, C:\icu4c-4_8).
  2. Ouvrez la solution Visual Studio dans <ICU_PATH>\source\allinone.
  3. Tout construire pour la configuration de débogage et de publication de la plate-forme de votre choix. Il peut y avoir un problème lors de la création de versions récentes de ICU4C avec Visual Studio 2010 lorsque la sortie pour la construction de débogage et de publication se trouve dans le même répertoire (ce qui correspond au comportement par défaut). Une solution de contournement possible consiste à créer un Build All (de debug build, par exemple), puis à reconstruire tout dans la deuxième configuration (par exemple, une version validée).
  4. Si vous créez pour x64, vous devrez exécuter un système d'exploitation x64 car des étapes postérieures à la construction impliquent l'exécution d'une partie de l'application 64 bits qu'elle est en train de générer.
  5. Supprimez éventuellement le répertoire source lorsque vous avez terminé.
  6. Suivez le deuxième ensemble d’instructions ci-dessus pour créer un boost, mais ajoutez l’option -sICU_PATH="C:\icu4c-4_8" lors de l’exécution de b2 à l’étape 5.
505
KTC

Bien que les instructions sur le site Web Boost soient utiles, voici une version condensée qui construit également des bibliothèques x64.

  • Vous ne devez le faire que si vous utilisez l’une des bibliothèques mentionnées dans section de la page d’instructions. (Par exemple, pour utiliser Boost.Filesystem nécessite une compilation.) Si vous n'utilisez aucun de ces logiciels, décompressez-le et allez-y.

Construire les bibliothèques 32 bits

Cela installe les fichiers d'en-tête Boost sous C:\Boost\include\boost-(version) et les bibliothèques 32 bits sous C:\Boost\lib\i386. Notez que l’emplacement par défaut des bibliothèques est C:\Boost\lib, mais vous voudrez les placer dans un répertoire i386 si vous envisagez de créer plusieurs architectures.

  1. Décompressez Boost dans un nouveau répertoire.
  2. Démarrez une invite MSVC 32 bits et accédez au répertoire dans lequel Boost a été décompressé.
  3. Run: bootstrap
  4. Exécuter: b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\i386 install

    • Pour Visual Studio 2012, utilisez toolset=msvc-11.0
    • Pour Visual Studio 2010, utilisez toolset=msvc-10.0
    • Pour Visual Studio 2017, utilisez toolset=msvc-14.1
  5. Ajoutez C:\Boost\include\boost-(version) à votre chemin d’inclusion.

  6. Ajoutez C:\Boost\lib\i386 au chemin de votre bibliothèque.

Construire les bibliothèques 64 bits

Cela installe les fichiers d'en-tête Boost sous C:\Boost\include\boost-(version) et les bibliothèques 64 bits sous C:\Boost\lib\x64. Notez que l’emplacement par défaut des bibliothèques est C:\Boost\lib, mais vous voudrez les placer dans un répertoire x64 si vous envisagez de créer plusieurs architectures.

  1. Décompressez Boost dans un nouveau répertoire.
  2. Démarrez une invite MSVC 64 bits et accédez au répertoire dans lequel Boost a été décompressé.
  3. Run: bootstrap
  4. Exécuter: b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\x64 architecture=x86 address-model=64 install
    • Pour Visual Studio 2012, utilisez toolset=msvc-11.0
    • Pour Visual Studio 2010, utilisez toolset=msvc-10.0
  5. Ajoutez C:\Boost\include\boost-(version) à votre chemin d’inclusion.
  6. Ajoutez C:\Boost\lib\x64 au chemin de votre bibliothèque.
152
Nate

Vous pouvez également essayer -j% NUMBER_OF_PROCESSORS% en argument, il utilisera tous vos cœurs. Rend les choses super vite sur mon quad core.

19
Aaron Stainback

Je pourrais recommander l’astuce suivante: Créer un fichier spécial boost.props

  1. Ouvrez le gestionnaire immobilier
  2. Faites un clic droit sur le nœud de votre projet et sélectionnez "Ajouter une nouvelle feuille de propriétés du projet".
  3. Sélectionnez un emplacement et nommez votre feuille de propriétés (par exemple, c:\mystuff\boost.props).
  4. Modifiez les dossiers Include et Lib supplémentaires dans le chemin de recherche.

Cette procédure a pour valeur que boost n’est inclus que dans les projets où vous souhaitez l’inclure explicitement. Quand vous avez un nouveau projet qui utilise boost, faites:

  1. Ouvrez le gestionnaire de propriété.
  2. Cliquez avec le bouton droit sur le nœud du projet et sélectionnez "Ajouter une feuille de propriétés existante".
  3. Sélectionnez la feuille de propriétés de boost.

EDIT (édité à partir de @ jim-fred):

Le fichier boost.props résultant ressemble à ceci ...

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros">
    <BOOST_DIR>D:\boost_1_53_0\</BOOST_DIR>
  </PropertyGroup>
  <PropertyGroup>
    <IncludePath>$(BOOST_DIR);$(IncludePath)</IncludePath>
    <LibraryPath>$(BOOST_DIR)stage\lib\;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
</Project>

Il contient une macro utilisateur pour l'emplacement du répertoire boost (dans ce cas, D:\boost_1_53_0) et deux autres paramètres: IncludePath et LibraryPath. Une instruction #include <boost/thread.hpp> trouverait thread.hpp dans le répertoire approprié (dans ce cas, D:\boost_1_53_0\boost\thread.hpp). Le répertoire 'stage\lib \' peut changer en fonction du répertoire installé.

Ce fichier boost.props peut être situé dans le répertoire D:\boost_1_53_0\.

14
Uri

De quelles parties de Boost avez-vous besoin? De nombreux éléments font partie de TR1 qui est fourni avec Visual Studio. Vous pouvez donc simplement dire, par exemple:

#include <tr1/memory>

using std::tr1::shared_ptr;

Selon James, cela devrait également fonctionner (en C++ 0x):

#include <memory>

using std::shared_ptr;
13
fredoverflow

Ce fil de discussion existe depuis un certain temps et j'ai pensé ajouter quelque chose à propos de COMMENT construire Boost aussi rapidement que possible sur votre matériel spécifique.

Si vous avez 4 ou 6 cœurs, utilisez -j5 ou -j7 respectivement. Certainement pas la version standard ni -j2 sauf si vous avez un dual core.

J'utilise un Sandy Bridge Extreme avec des stocks cadencés à 3930K (6 cœurs) sur ma station principale, mais un 2600k (4 cœurs) sur une boîte de sauvegarde plus ancienne, et la tendance est que je reçois les meilleurs temps de compilation Boost avec N + 1 processus de construction où N est le nombre de cœurs physiques. N + 2 atteint un point de rendements décroissants et les temps montent.

Remarques: L’hyperthreading est activé, 32 Go RAM DDR3, Samsung 840 EVO SSD.

- j7 sur 6 cœurs (2 minutes et 51 secondes) (Win7 Ultimate x64) (Visual Studio 2013)

PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j7 --build-type=complete msvc stage }

Days              : 0
Hours             : 0
Minutes           : 2
Seconds           : 51
Milliseconds      : 128
Ticks             : 1711281830
TotalDays         : 0.0019806502662037
TotalHours        : 0.0475356063888889
TotalMinutes      : 2.85213638333333
TotalSeconds      : 171.128183
TotalMilliseconds : 171128.183

- j6 sur 6 cœurs (3 minutes et 2 secondes) (Win7 Ultimate x64) (Visual Studio 2013)

PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j6 --build-type=complete msvc stage }

Days              : 0
Hours             : 0
Minutes           : 3
Seconds           : 2
Milliseconds      : 809
Ticks             : 1828093904
TotalDays         : 0.00211584942592593
TotalHours        : 0.0507803862222222
TotalMinutes      : 3.04682317333333
TotalSeconds      : 182.8093904
TotalMilliseconds : 182809.3904

- j8 sur 6 cœurs (3 minutes et 17 secondes) (Win7 Ultimate x64) (Visual Studio 2013)

PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j8 --build-type=complete msvc stage }

Days              : 0
Hours             : 0
Minutes           : 3
Seconds           : 17
Milliseconds      : 652
Ticks             : 1976523915
TotalDays         : 0.00228764342013889
TotalHours        : 0.0549034420833333
TotalMinutes      : 3.294206525
TotalSeconds      : 197.6523915
TotalMilliseconds : 197652.3915

-j7 build on 6-core

Config

Building the Boost C++ Libraries.


Performing configuration checks

    - 32-bit                   : yes (cached)
    - arm                      : no  (cached)
    - mips1                    : no  (cached)
    - power                    : no  (cached)
    - sparc                    : no  (cached)
    - x86                      : yes (cached)
    - has_icu builds           : no  (cached)
warning: Graph library does not contain MPI-based parallel components.
note: to enable them, add "using mpi ;" to your user-config.jam
    - zlib                     : no  (cached)
    - iconv (libc)             : no  (cached)
    - iconv (separate)         : no  (cached)
    - icu                      : no  (cached)
    - icu (lib64)              : no  (cached)
    - message-compiler         : yes (cached)
    - compiler-supports-ssse3  : yes (cached)
    - compiler-supports-avx2   : yes (cached)
    - gcc visibility           : no  (cached)
    - long double support      : yes (cached)
warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam.
note: to suppress this message, pass "--without-mpi" to bjam.
note: otherwise, you can safely ignore this message.
    - zlib                     : no  (cached)

Je remarque que la construction 64 bits prend un peu plus de temps, je dois faire la même comparaison pour les mettre à jour.

6
codenheim

Téléchargez le boost à partir de: http://www.boost.org/users/download/ p. Ex. par svn

  • Windows -> tortue (la manière la plus simple)

Après cela: cmd -> allez dans le répertoire boost ("D:\boostTrunk" - où vous extrayez ou téléchargez et extrayez le package): commande: bootstrap

nous avons créé bjam.exe dans ("D:\boostTrunk") Après cela: commande: bjam toolset = msvc-10.0 variant = debug, release threading = multi link = static (Cela prendra du temps ~ 20min.)

Après cela: Open Visual studio 2010 -> créer un projet vide -> aller aux propriétés du projet -> set:

Project properties VS 2010

Collez ce code et vérifiez s'il fonctionne?

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

using namespace std;

struct Hello 
{
    Hello(){ 
        cout << "Hello constructor" << endl;
    }

    ~Hello(){
        cout << "Hello destructor" << endl;
        cin.get();
    }
};


int main(int argc, char**argv)
{
    //Boost regex, compiled library
    boost::regex regex("^(Hello|Bye) Boost$");
    boost::cmatch helloMatches;
    boost::regex_search("Hello Boost", helloMatches, regex);
    cout << "The Word between () is: " << helloMatches[1] << endl;

    //Boost shared pointer, header only library
    boost::shared_ptr<Hello> sharedHello(new Hello);

    return 0;
}

Ressources: https://www.youtube.com/watch?v=5AmwIwedTCM

5
andrew

Aussi une petite remarque: si vous voulez réduire le temps de compilation, vous pouvez ajouter le drapeau

-j2

pour exécuter deux constructions parallèles en même temps. Cela pourrait le réduire à la visualisation d'un film;)

5
GaMer13

Voici comment j'ai pu utiliser Boost:

  1. Téléchargez et extrayez la version Zip des bibliothèques Boost.
  2. Exécutez le fichier bootstrap.bat, puis exécutez bjam.exe.
  3. Attendez environ 30 minutes environ.
  4. Créez un nouveau projet dans Visual Studio.
  5. Allez dans le répertoire projet -> propriétés -> Éditeur de liens -> Général -> Répertoires de bibliothèque supplémentaires et ajoutez le répertoire boost/stage/lib.
  6. Allez dans projet -> propriétés -> C/C++ -> Général -> Répertoires d'inclusion supplémentaires et ajoutez le répertoire boost.

Vous pourrez construire votre projet sans aucune erreur!

4
bhavesh

Les installateurs Windows situés ici fonctionnaient parfaitement pour moi. J'ai pris les mesures suivantes:

  1. Suivez l'assistant d'installation jusqu'à la fin.
  2. Exécutez Visual Studio.
  3. Créer un nouveau projet C++
  4. Ouvrir les propriétés du projet (vous pouvez les trouver en cliquant avec le bouton droit de la souris sur le nom du projet dans l'explorateur de solutions).
  5. Sous "C/C++> Général> Répertoires d'inclusion supplémentaires", ajoutez le chemin d'accès au répertoire racine boost. La version par défaut de ma version était C:\local\boost_1_63_0. Le nombre après "boost" est la version de boost.
  6. Dans les propriétés du projet, sous "Éditeur de liens> Répertoires de bibliothèque supplémentaires", ajoutez le répertoire des fichiers de bibliothèque. La valeur par défaut pour ma version était C:\local\boost_1_63_0\lib64-msvc-14.0. Le nombre après "lib" est lié à la cible de génération (32 bits ou 64 bits dans Visual Studio) et le nombre après "msvc" est associé à la version de Visual Studio (14.0 est associé à Visual Studio 2015, mais je suis en l’utilisant avec le Visual Studio 2017).

Bonne chance!

3
Zoob

Un petit ajout à la réponse principale très informative de KTC:

Si vous utilisez le logiciel gratuit Visual Studio c ++ 2010 Express et avez réussi à le faire compiler des fichiers binaires 64 bits et que vous souhaitez maintenant l'utiliser pour utiliser une version 64 bits des librairies Boost, vous risquez de vous retrouver avec 32 bits. bibliothèques de bits (votre kilométrage peut varier, bien sûr, mais sur ma machine, il s’agit du cas triste).

Je pourrais résoudre ce problème en procédant comme suit: entre les étapes décrites ci-dessus

  1. Démarrez une invite MSVC 32 bits et accédez au répertoire dans lequel Boost a été décompressé.
  2. Run: bootstrap

J'ai inséré un appel à 'setenv' pour définir l'environnement. Pour une version release, les étapes ci-dessus deviennent:

  1. Démarrez une invite MSVC 32 bits et accédez au répertoire dans lequel Boost a été décompressé.
  2. Exécuter: "C:\Programmes\Microsoft SDK\Windows\v7.1\Bin\setenv.cmd"/Version/x64
  3. Run: bootstrap

J'ai trouvé cette information ici: http://boost.2283326.n4.nabble.com/64-bit-with-VS-Express-again-td3044258.html

2
ecotax

Un exemple minimaliste pour vous aider à démarrer dans Visual Studio:

1 . Télécharger et décompressez Boost à partir d'ici.

2.Créez un projet vide Visual Studio en utilisant un exemple de bibliothèque boost ne nécessitant pas de compilation séparée:

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

using namespace std;  
using namespace boost;  

int main()  
{  
    unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D };  

    cout << format("%02X-%02X-%02X-%02X-%02X")  
            % arr[0]  
            % arr[1]  
            % arr[2]  
            % arr[3]  
            % arr[4]  
         << endl;  
}  

3.Dans les propriétés de votre projet Visual Studio, définissez les répertoires d'inclusion supplémentaires:

Project Properties

Pour un exemple très simple:

Comment installer les bibliothèques Boost dans Visual Studio

Si vous ne voulez pas utiliser la totalité de la bibliothèque de boost, il suffit d'un sous-ensemble:

tilisation d'un sous-ensemble des bibliothèques boost de Windows

Si vous voulez spécifiquement parler des bibliothèques qui nécessitent une compilation:

Comment utiliser les bibliothèques compilées Boost sous Windows

1
AndyUK

De plus, il y a quelque chose que je trouve très utile. Utilisez des variables d'environnement pour vos chemins de boost. (Comment définir les variables d'environnement dans Windows, lien en bas pour 7,8,10) La variable BOOST_ROOT semble être plus commune et est définie sur le chemin racine où vous décompressez boost.

Ensuite, dans Propriétés, c ++, général, les répertoires d'inclusion supplémentaires utilisent $(BOOST_ROOT). Ensuite, si/lorsque vous passez à une version plus récente de la bibliothèque boost, vous pouvez mettre à jour votre variable d’environnement pour pointer vers cette version plus récente. Comme plus de vos projets, utilisez boost, vous n’aurez pas à mettre à jour les "répertoires d'inclusion supplémentaires" pour chacun d'entre eux.

Vous pouvez également créer une variable BOOST_LIB et la diriger vers l'emplacement des bibliothèques. De même, pour l'éditeur de liens -> Répertoires de bibliothèque supplémentaires, vous n'avez pas à mettre à jour les projets. J'ai des vieux trucs construits avec vs10 et de nouveaux trucs avec vs14, donc construit les deux versions de la librairie boost dans le même dossier. Donc, si je déplace un projet de vs10 à vs14, je n'ai pas à changer les chemins de relance.

REMARQUE: Si vous modifiez une variable d'environnement, celle-ci ne fonctionnera pas soudainement dans un projet VS ouvert. VS charge les variables au démarrage. Vous devrez donc fermer VS et le rouvrir.

0
lakeweb