Was ist eine gute schrittweise Erklärung zur Verwendung der Boost-Bibliothek in einem leeren Projekt in Visual Studio?
Was ist eine gute schrittweise Erklärung zur Verwendung der Boost-Bibliothek in einem leeren Projekt in Visual Studio?
Antworten:
Obwohl Nates Antwort bereits ziemlich gut ist, werde ich sie wie gewünscht genauer für Visual Studio 2010 erweitern 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 den Boost-Download aufheben und die Umgebungsvariablen einrichten. Mit der folgenden Anweisung werden die Umgebungsvariablen nur für Visual Studio und nicht für das gesamte System festgelegt. Beachten Sie, dass Sie dies nur einmal tun müssen.
C:\boost_1_47_0
. B. ).Microsoft.Cpp.<Platform>.user
Sie Properties
mit der rechten Maustaste und wählen Sie , um die Eigenschaftsseite zum Bearbeiten zu öffnen.VC++ Directories
links.Include Directories
Abschnitt so, dass er den Pfad zu Ihren Boost-Quelldateien enthält.Wenn Sie den Teil des Boosts verwenden möchten, für den eine Erstellung erforderlich ist, aber keine der Funktionen, für die externe Abhängigkeiten erforderlich sind, ist die Erstellung recht einfach.
C:\boost_1_47_0
. B. ).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
Gehen Sie spazieren / schauen Sie sich einen Film an oder 2 / ....
Library Directories
Abschnitt so, dass er den Pfad zur Ausgabe Ihrer Boost-Bibliotheken enthält. (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 und x64 nebeneinander haben möchten (z. B. nach <BOOST_PATH>\lib\x86
& <BOOST_PATH>\lib\x64
).Wenn Sie die optionalen Komponenten möchten, haben Sie mehr Arbeit zu erledigen. Diese sind:
Boost.IOStreams Bzip2-Filter:
C:\bzip2-1.0.6
. B. ).-sBZIP2_SOURCE="C:\bzip2-1.0.6"
wenn Sie in Schritt 5 b2 ausführen.Boost.IOStreams Zlib-Filter
C:\zlib-1.2.5
. B. ).-sZLIB_SOURCE="C:\zlib-1.2.5"
wenn Sie in Schritt 5 b2 ausführen.Boost.MPI
project-config.jam
in dem Verzeichnis <BOOST_PATH>
, das beim Ausführen von Bootstrap entstanden ist. Fügen Sie in einer Zeile Folgendes hinzu using mpi ;
(beachten Sie das Leerzeichen vor dem ';').Boost.Python
Um die 32-Bit-Version der Bibliothek vollständig zu erstellen, ist 32-Bit-Python erforderlich, ähnlich wie bei der 64-Bit-Version. Wenn Sie aus diesem Grund mehrere Versionen installiert haben, müssen Sie b2 mitteilen, wo sich eine bestimmte Version befindet und wann welche verwendet werden soll. Eine Möglichkeit, dies zu tun, besteht darin, die Datei project-config.jam
in dem Verzeichnis zu bearbeiten, das <BOOST_PATH>
sich aus der Ausführung von Bootstrap ergibt. Fügen Sie in den folgenden zwei Zeilen die entsprechenden Einstellungen 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 dazu führt, dass die MPI-Erstellung fehlschlägt. Sie müssen also ein separates Gebäude mit und ohne Spezifikation erstellen, um alles zu erstellen, wenn Sie auch MPI erstellen.
Befolgen Sie die zweiten Anweisungen oben, um den Boost aufzubauen.
Boost.Regex ICU-Unterstützung
C:\icu4c-4_8
. B. ).<ICU_PATH>\source\allinone
.-sICU_PATH="C:\icu4c-4_8"
wenn Sie in Schritt 5 b2 ausführen.Während die Anweisungen auf der Boost-Website hilfreich sind, finden Sie 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 installiert C:\Boost\lib\i386
. Beachten Sie, dass der Standardspeicherort für die Bibliotheken ist C:\Boost\lib
, Sie sie jedoch in ein i386
Verzeichnis stellen möchten, wenn Sie für mehrere Architekturen erstellen möchten .
bootstrap
Lauf: 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 C:\Boost\include\boost-(version)
Ihrem Include-Pfad hinzu.
C:\Boost\lib\i386
Ihrem libs-Pfad hinzu.Dadurch werden die Boost-Header-Dateien unter C:\Boost\include\boost-(version)
und die 64-Bit-Bibliotheken unter installiert C:\Boost\lib\x64
. Beachten Sie, dass der Standardspeicherort für die Bibliotheken ist C:\Boost\lib
, Sie sie jedoch in ein x64
Verzeichnis stellen möchten, wenn Sie für 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)
Ihrem Include-Pfad hinzu.C:\Boost\lib\x64
Ihrem libs-Pfad hinzu.Sie können auch -j% NUMBER_OF_PROCESSORS% als Argument verwenden, um alle Ihre Kerne zu verwenden. Macht die Dinge auf meinem Quad-Core superschnell.
Ich könnte den folgenden Trick empfehlen: Erstellen Sie eine spezielle boost.props
Datei
Diese Prozedur hat den Wert, dass Boost nur in Projekten enthalten ist, in denen Sie ihn 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):
Die 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 Boost-Verzeichnisses (in diesem Fall D: \ boost_1_53_0) und zwei weitere Parameter: IncludePath und LibraryPath. Eine Anweisung #include <boost/thread.hpp>
würde thread.hpp im entsprechenden Verzeichnis finden (in diesem Fall D: \ boost_1_53_0 \ boost \ thread.hpp). Das Verzeichnis 'stage \ lib \' kann sich je nach installiertem Verzeichnis ändern.
Diese Datei boost.props befindet sich möglicherweise im D:\boost_1_53_0\
Verzeichnis.
Welche Teile von Boost benötigen Sie? Viele Dinge sind Teil von TR1, das mit Visual Studio geliefert wird. Man könnte 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;
std
, wie im C ++ 0x-Standard in den Namespace verschoben . (Ich denke, sie befinden sich std::tr1
aus Gründen der Abwärtskompatibilität wahrscheinlich auch im Namespace).
Dieser Thread gibt es schon eine Weile und ich dachte, ich würde etwas darüber hinzufügen, wie Boost so schnell wie möglich auf Ihrer spezifischen Hardware erstellt werden kann.
Wenn Sie einen 4- oder 6-Kern haben, verwenden Sie -j5 bzw. -j7. Sicherlich nicht der Standard-Build oder -j2, es sei denn, Sie haben tatsächlich einen Dual-Core.
Ich verwende eine Sandy Bridge Extreme mit 3930K (6-Core) auf meiner Hauptstation, habe aber eine 2600k (4-Core) auf einer älteren Backup-Box und der Trend ist, dass ich mit N + die besten Boost-Kompilierungszeiten erhalte 1 Build-Prozesse, wobei N die Anzahl der physischen Kerne ist. N + 2 erreicht einen Punkt abnehmender 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 durchführen und aktualisieren.
Auch ein kleiner Hinweis: Wenn Sie die Kompilierungszeit verkürzen möchten, können Sie das Flag hinzufügen
-j2
zwei parallele Builds gleichzeitig ausführen. Dies könnte es auf das Ansehen eines Films reduzieren;)
-j2
würde den Wert Ihrer Antwort erhöhen.
Laden Sie boost von folgender Adresse herunter: http://www.boost.org/users/download/, z. B. 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 Variante = Debug, Release Threading = Multi Link = Statisch (Es wird einige Zeit ~ dauern.)
Danach: Öffnen Sie Visual Studio 2010 -> erstellen Sie ein leeres Projekt -> gehen Sie zu den Projekteigenschaften -> setzen Sie:
Diesen Code einfügen und prüfen, ob er 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
So konnte ich Boost nutzen:
Sie können Ihr Projekt fehlerfrei erstellen!
Die hier befindlichen Windows-Installationsprogramme haben für mich 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, dieses zum Kompilieren von 64-Bit-Binärdateien zu verwenden, und dies nun zur Verwendung einer 64-Bit-Version der Boost-Bibliotheken verwenden möchten, erhalten Sie möglicherweise 32- Bit-Bibliotheken (Ihr Kilometerstand 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 von 'setenv' eingefügt, um die Umgebung festzulegen. Für einen Release-Build werden die folgenden Schritte wie folgt ausgeführt:
Ich habe diese Informationen hier gefunden: 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. Laden Sie Boost hier herunter und entpacken Sie es.
2.Erstellen Sie ein leeres Visual Studio-Projekt mithilfe einer Beispiel-Boost-Bibliothek, für die keine separate Kompilierung erforderlich ist:
#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. Legen Sie in Ihren Visual Studio-Projekteigenschaften die zusätzlichen Include-Verzeichnisse fest:
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, nur eine Teilmenge:
Verwenden einer Teilmenge der Boost-Bibliotheken in Windows
Wenn Sie jetzt speziell auf die Bibliotheken eingehen möchten, die kompiliert werden müssen:
Darüber hinaus finde ich etwas sehr nützlich. Verwenden Sie Umgebungsvariablen für Ihre Boost-Pfade. (So legen Sie Umgebungsvariablen in Windows fest, Link unten für 7,8,10) Die Variable BOOST_ROOT scheint nicht mehr alltäglich zu sein und wird auf den Stammpfad gesetzt, in dem Sie den Boost entpacken.
Dann in Eigenschaften, c ++, allgemein, Zusätzliche Include-Verzeichnisse verwenden $(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 mehr Projekte verwenden, müssen Sie Boost verwenden. Sie müssen nicht für alle Projekte die zusätzlichen Include-Verzeichnisse aktualisieren.
Sie können auch eine BOOST_LIB-Variable erstellen und darauf verweisen, wo die Bibliotheken bereitgestellt werden. 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 gebaut, also habe ich beide Varianten der Boost Lib in den gleichen Ordner gebaut. Wenn ich also ein Projekt von vs10 auf vs14 verschiebe, muss ich die Boost-Pfade nicht ändern.
ANMERKUNG: Wenn Sie eine Umgebungsvariable ändern, funktioniert sie in einem geöffneten VS-Projekt nicht plötzlich. VS lädt beim Start Variablen. Sie müssen also VS schließen und erneut öffnen.