Was ist eine gute schrittweise Erklärung zur Verwendung der Boost-Bibliothek in einem leeren Projekt in Visual Studio?
Obwohl Nates Antwort bereits ziemlich gut ist, werde ich es auf Anfrage genauer für Visual Studio 2010 erläutern und Informationen zum Kompilieren in die verschiedenen optionalen Komponenten aufnehmen, für die externe Bibliotheken erforderlich sind.
Wenn Sie nur Header-Bibliotheken verwenden, müssen Sie lediglich die Archivierung des Boost-Downloads aufheben und die Umgebungsvariablen einrichten. Die folgenden Anweisungen legen die Umgebungsvariablen nur für Visual Studio und nicht für das gesamte System fest. Beachten Sie, dass Sie dies nur einmal tun müssen.
C:\boost_1_47_0
).Microsoft.Cpp.<Platform>.user
Und wählen Sie Properties
, um die Eigenschaftsseite zum Bearbeiten zu öffnen.VC++ Directories
.Include Directories
, Um den Pfad zu Ihren Boost-Quelldateien anzugeben.Wenn Sie den Teil des Boosts verwenden möchten, für den eine Erstellung erforderlich ist, für den jedoch keine externen Abhängigkeiten erforderlich sind, ist die Erstellung relativ einfach.
C:\boost_1_47_0
).bootstrap.bat
, Um b2.exe (zuvor bjam genannt) zu erstellen.Führen Sie b2 aus:
b2 --toolset=msvc-10.0 --build-type=complete stage
;b2 --toolset=msvc-10.0 --build-type=complete architecture=x86 address-model=64 stage
Spazieren gehen/einen Film schauen oder 2/....
Library Directories
, Um den Pfad zur Ausgabe Ihrer Boost-Bibliotheken anzugeben. (Die Standardeinstellung für das obige Beispiel und die obigen Anweisungen wäre C:\boost_1_47_0\stage\lib
. Benennen Sie das Verzeichnis um und verschieben Sie es zuerst, wenn Sie x86 & x64 nebeneinander haben möchten (z. B. zu <BOOST_PATH>\lib\x86
& <BOOST_PATH>\lib\x64
).Wenn Sie die optionalen Komponenten benötigen, haben Sie mehr zu tun. Diese sind:
Boost.IOStreams Bzip2 Filter:
C:\bzip2-1.0.6
).-sBZIP2_SOURCE="C:\bzip2-1.0.6"
Hinzu, wenn Sie in Schritt 5 b2 ausführen.Boost.IOStreams Zlib-Filter
C:\zlib-1.2.5
).-sZLIB_SOURCE="C:\zlib-1.2.5"
Hinzu, wenn Sie in Schritt 5 b2 ausführen.Boost.MPI
project-config.jam
Im Verzeichnis <BOOST_PATH>
, Das sich aus dem Ausführen von Bootstrap ergibt. Fügen Sie in einer Zeile using mpi ;
Hinzu (beachten Sie das Leerzeichen vor dem ';').Boost.Python
Um die 32-Bit-Version der Bibliothek vollständig zu erstellen, ist 32-Bit-Python erforderlich, und dies gilt auch für die 64-Bit-Version. Wenn Sie aus diesem Grund mehrere Versionen installiert haben, müssen Sie b2 mitteilen, wo und wann eine bestimmte Version zu finden ist. Eine Möglichkeit, dies zu tun, besteht darin, die Datei project-config.jam
Im Verzeichnis <BOOST_PATH>
Zu bearbeiten, das sich aus dem Ausführen von Bootstrap ergibt. Fügen Sie in den folgenden beiden Zeilen die entsprechenden Anpassungen für Ihre Python Installationspfade und -versionen hinzu (beachten Sie das Leerzeichen vor dem ';').
using python : 2.6 : C:\\Python\\Python26\\python ;
using python : 2.6 : C:\\Python\\Python26-x64\\python : : : <address-model>64 ;
Beachten Sie, dass eine solche explizite Python Spezifikation derzeit MPI Build fehlschlägt. Sie müssen also ein separates Build mit und ohne Spezifikation ausführen, um alles zu erstellen, wenn Sie bauen MPI ebenfalls.
Befolgen Sie die obigen Anweisungen, um den Boost aufzubauen.
Boost.Regex ICU Unterstützung
C:\icu4c-4_8
).<ICU_PATH>\source\allinone
.-sICU_PATH="C:\icu4c-4_8"
Hinzu, wenn Sie in Schritt 5 b2 ausführen.Während die Anweisungen auf der Boost-Website hilfreich sind, ist hier eine komprimierte Version, die auch x64-Bibliotheken erstellt.
Dadurch werden die Boost-Header-Dateien unter C:\Boost\include\boost-(version)
und die 32-Bit-Bibliotheken unter C:\Boost\lib\i386
Installiert. Beachten Sie, dass der Standardspeicherort für die Bibliotheken C:\Boost\lib
Ist, Sie sie jedoch in ein i386
- Verzeichnis verschieben möchten, wenn Sie mehrere Architekturen erstellen möchten.
bootstrap
Ausführen: b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\i386 install
toolset=msvc-11.0
toolset=msvc-10.0
toolset=msvc-14.1
Fügen Sie Ihrem Include-Pfad C:\Boost\include\boost-(version)
hinzu.
C:\Boost\lib\i386
Hinzu.Dadurch werden die Boost-Header-Dateien unter C:\Boost\include\boost-(version)
und die 64-Bit-Bibliotheken unter C:\Boost\lib\x64
Installiert. Beachten Sie, dass der Standardspeicherort für die Bibliotheken C:\Boost\lib
Ist, Sie sie jedoch in ein x64
- Verzeichnis verschieben möchten, wenn Sie mehrere Architekturen erstellen möchten.
bootstrap
b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\x64 architecture=x86 address-model=64 install
toolset=msvc-11.0
toolset=msvc-10.0
C:\Boost\include\boost-(version)
hinzu.C:\Boost\lib\x64
Hinzu.Sie können auch -j% NUMBER_OF_PROCESSORS% als Argument verwenden, das alle Ihre Kerne verwendet. Macht die Dinge auf meinem Quad-Core superschnell.
Ich könnte den folgenden Trick empfehlen: Erstelle ein spezielles boost.props
Datei
Diese Prozedur hat den Wert, dass boost nur in Projekten enthalten ist, in denen Sie es explizit einschließen möchten. Wenn Sie ein neues Projekt haben, das boost verwendet, gehen Sie wie folgt vor:
BEARBEITEN (folgende Bearbeitung von @ jim-fred):
Das resultierende boost.props
Datei sieht ungefähr so aus ...
<?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>
Es enthält ein Benutzermakro für den Speicherort des Verzeichnisses boost (in diesem Fall D:\boost_1_53_0) und zwei weitere Parameter: IncludePath und LibraryPath. Eine Erklärung #include <boost/thread.hpp>
findet thread.hpp im entsprechenden Verzeichnis (in diesem Fall D:\boost_1_53_0\boost\thread.hpp). Das Verzeichnis 'stage\lib \' kann sich je nach dem in installierten Verzeichnis ändern.
Diese boost.props-Datei könnte sich im D:\boost_1_53_0\
Verzeichnis.
Welche Teile von Boost brauchst du? Viele Dinge sind Teil von TR1, das mit Visual Studio ausgeliefert wird. Sie können also einfach sagen, zum Beispiel:
#include <tr1/memory>
using std::tr1::shared_ptr;
Laut James sollte dies auch funktionieren (in C++ 0x):
#include <memory>
using std::shared_ptr;
Dieser Thread ist schon eine Weile her und ich dachte, ich würde etwas über WIE hinzufügen, um Boost so schnell wie möglich auf Ihrer spezifischen Hardware zu erstellen.
Wenn Sie einen 4- oder 6-Kern haben, verwenden Sie -j5 bzw. -j7. Mit Sicherheit nicht der Standardbuild oder -j2, es sei denn, Sie haben tatsächlich einen Dual-Core.
Ich verwende einen Sandy Bridge Extreme mit 3930K (6-Core) auf meinem Hauptrechner, aber 2600K (4-Core) auf einer älteren Backup-Box, und der Trend ist, dass ich mit N + die besten Boost-Kompilierzeiten erhalte 1 Build-Prozesse, bei denen N die Anzahl der physischen Kerne ist. N + 2 erreicht einen Punkt sinkender Renditen und die Zeiten steigen.
Hinweise: Hyperthreading ist aktiviert, 32 GB RAM DDR3, Samsung 840 EVO SSD.
- j7 auf 6-Core (2 Minuten und 51 Sekunden) (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 auf 6-Core (3 Minuten und 2 Sekunden) (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 auf 6-Core (3 Minuten und 17 Sekunden) (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
Konfig
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)
Ich stelle fest, dass der 64-Bit-Build etwas länger dauert. Ich muss den gleichen Vergleich für diese und das Update durchführen.
Laden Sie boost von: http://www.boost.org/users/download/ z. von svn
Danach: cmd -> gehe zum boost Verzeichnis ("D:\boostTrunk" - wo du das Paket auscheckst oder herunterlädst und extrahierst): Befehl: bootstrap
wir haben bjam.exe in ("D:\boostTrunk") erstellt. Danach: Befehl: bjam toolset = msvc-10.0 variant = debug, release threading = multi link = static (Es wird einige Zeit dauern ~ 20min.)
Danach: Visual Studio 2010 öffnen -> leeres Projekt erstellen -> zu den Projekteigenschaften gehen -> einstellen:
Fügen Sie diesen Code ein und überprüfen Sie, ob es funktioniert?
#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;
}
Ressourcen: https://www.youtube.com/watch?v=5AmwIwedTCM
Noch ein kleiner Hinweis: Wenn Sie die Übersetzungszeit reduzieren möchten, können Sie das Flag hinzufügen
-j2
zwei parallele Builds gleichzeitig ausführen. Dies kann dazu führen, dass nur ein Film angezeigt wird.
So konnte ich Boost nutzen:
Sie können Ihr Projekt fehlerfrei erstellen!
Die Windows-Installationsprogramme hier haben bei mir perfekt funktioniert. Ich habe folgende Schritte unternommen:
Viel Glück!
Eine kleine Ergänzung zu KTCs sehr informativer Hauptantwort:
Wenn Sie das kostenlose Visual Studio c ++ 2010 Express verwenden und es geschafft haben, 64-Bit-Binärdateien zu kompilieren, und das jetzt für die Verwendung einer 64-Bit-Version der Boost-Bibliotheken verwenden möchten, erhalten Sie möglicherweise 32-Bit-Binärdateien. Bits Bibliotheken (Ihre Laufleistung kann natürlich variieren, aber auf meinem Computer ist dies der traurige Fall).
Ich könnte dies folgendermaßen beheben: Zwischen den oben beschriebenen Schritten als
Ich habe einen Aufruf an 'setenv' eingefügt, um die Umgebung einzustellen. Bei einem Release-Build werden die obigen Schritte wie folgt ausgeführt:
Ich fand diese Information hier: http://boost.2283326.n4.nabble.com/64-bit-with-VS-Express-again-td3044258.html
Ein minimalistisches Beispiel für den Einstieg in Visual Studio:
1 . Download und entpacke Boost von hier.
2.Erstellen Sie ein leeres Visual Studio-Projekt mit einer Beispiel-Boost-Bibliothek, die keine separate Kompilierung erfordert:
#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.Stellen Sie in Ihren Visual Studio-Projekteigenschaften die zusätzlichen Include-Verzeichnisse ein:
Für ein sehr einfaches Beispiel:
So installieren Sie die Boost-Bibliotheken in Visual Studio
Wenn Sie nicht die gesamte Boost-Bibliothek verwenden möchten, geben Sie nur eine Teilmenge ein:
Verwenden einer Teilmenge der Boost-Bibliotheken in Windows
Wenn Sie sich jetzt speziell mit den Bibliotheken befassen möchten, die kompiliert werden müssen:
Außerdem finde ich etwas sehr Nützliches. Verwenden Sie Umgebungsvariablen für Ihre Boost-Pfade. (So setzen Sie Umgebungsvariablen in Windows, Link unten für 7,8,10) Die Variable BOOST_ROOT scheint nicht mehr an der Tagesordnung zu sein und wird auf den Root-Pfad gesetzt, in den Sie boost entpacken.
Verwenden Sie dann in Properties, c ++, general, Additional Include Directories $(BOOST_ROOT)
. Wenn Sie dann zu einer neueren Version der Boost-Bibliothek wechseln, können Sie Ihre Umgebungsvariable so aktualisieren, dass sie auf diese neuere Version verweist. Wenn Sie boost für mehr Projekte verwenden, müssen Sie die zusätzlichen Include-Verzeichnisse nicht für alle aktualisieren.
Sie können auch eine BOOST_LIB-Variable erstellen und auf den Speicherort der Bibliotheken verweisen. Ebenso müssen Sie für die Linker-> Additional Library Directories keine Projekte aktualisieren. Ich habe einige alte Sachen mit vs10 und neue Sachen mit vs14, also bauten beide Varianten der Boost-Lib in den gleichen Ordner. Wenn ich also ein Projekt von vs10 nach vs14 verschiebe, muss ich die Boost-Pfade nicht ändern.
HINWEIS: Wenn Sie eine Umgebungsvariable ändern, funktioniert sie in einem geöffneten VS-Projekt nicht plötzlich. VS lädt Variablen beim Start. Sie müssen VS also schließen und erneut öffnen.