如何在Visual Studio 2010中使用Boost

关于如何在Visual Studio的空项目中使用Boost库的一步一步的解释是什么?

275178 次浏览

你需要Boost的哪些部分?很多东西都是TR1的一部分,它是随Visual Studio一起发布的,所以你可以简单地说,例如:

#include <tr1/memory>


using std::tr1::shared_ptr;

根据James的说法,这也应该工作(在c++ 0x中):

#include <memory>


using std::shared_ptr;

虽然Boost网站上的指令是有帮助的,这里是一个浓缩版本,也构建x64库。

  • 只有当你在使用指令页的第三节中提到的一个库时,你才需要这样做。(例如,使用Boost。文件系统需要编译。)如果您不使用其中任何一个,只需解压缩并运行。

构建32位库

这将在C:\Boost\include\boost-(version)下安装Boost头文件,并在C:\Boost\lib\i386下安装32位库。注意,库的默认位置是C:\Boost\lib,但如果你计划为多个体系结构构建,你会想把它们放在i386目录下。

  1. 解压缩Boost到一个新目录。
  2. 启动32位MSVC命令提示符,并切换到解压缩Boost的目录。
  3. 运行:bootstrap
  4. < p >运行:b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\i386 install

    • 对于Visual Studio 2012,使用toolset=msvc-11.0
    • 对于Visual Studio 2010,使用toolset=msvc-10.0
    • 对于Visual Studio 2017,使用toolset=msvc-14.1
    • 李< / ul > < / >
    • C:\Boost\include\boost-(version)添加到include路径中。

    • C:\Boost\lib\i386添加到libs路径中。

构建64位库

这将在C:\Boost\include\boost-(version)下安装Boost头文件,并在C:\Boost\lib\x64下安装64位库。注意,库的默认位置是C:\Boost\lib,但如果你计划为多个体系结构构建,你会想把它们放在x64目录下。

  1. 解压缩Boost到一个新目录。
  2. 启动64位MSVC命令提示符,并切换到解压缩Boost的目录。
  3. 运行:bootstrap
  4. <李>运行:b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\x64 architecture=x86 address-model=64 install
    • 对于Visual Studio 2012,使用toolset=msvc-11.0
    • 对于Visual Studio 2010,使用toolset=msvc-10.0
    • 李< / ul > < / >
    • C:\Boost\include\boost-(version)添加到include路径中。
    • C:\Boost\lib\x64添加到libs路径中。

虽然内特的回答已经很好了,但我将根据要求更具体地为Visual Studio 2010扩展它,并包括在需要外部库的各种可选组件中编译的信息。

如果您只使用头文件库,那么您所需要做的就是解压缩boost下载并设置环境变量。下面的指令仅为Visual Studio设置环境变量,而不是在整个系统中设置。注意你只需要做一次。

  1. 将boost的最新版本(编写时为1.47.0)解压缩到您选择的目录(例如C:\boost_1_47_0)。
  2. 在Visual Studio中创建一个新的空项目。
  3. 打开Property Manager并展开所选平台的一个配置。
  4. 选择,右键单击Microsoft.Cpp.<Platform>.user,并选择Properties打开属性页进行编辑。
  5. 在左侧选择VC++ Directories
  6. 编辑Include Directories部分以包含boost源文件的路径。
  7. 重复步骤3 - 6为不同的平台,您的选择,如果需要。

如果您想使用boost中需要构建的部分,但不需要任何需要外部依赖的特性,那么构建它相当简单。

  1. 将boost的最新版本(编写时为1.47.0)解压缩到您选择的目录(例如C:\boost_1_47_0)。
  2. 启动所选平台的Visual Studio命令提示符,并导航到boost所在的位置。
  3. 运行:bootstrap.bat来构建b2.exe(以前命名为bjam)。
  4. < p > b2运行:

    • __abc1 __abc0;
    • x64: b2 --toolset=msvc-10.0 --build-type=complete architecture=x86 address-model=64 stage
    • 李< / ul > < / >

去散步/看电影或2 / ....

  1. 执行上述指令集中的步骤2 - 6来设置环境变量。
  2. 编辑Library Directories部分以包含到boost库输出的路径。(上面的例子和指令的默认值是C:\boost_1_47_0\stage\lib。如果你想要x86 &x64并排(如<BOOST_PATH>\lib\x86 &<BOOST_PATH>\lib\x64)。
  3. 重复步骤2 - 6为不同的平台,您的选择,如果需要。

如果您需要可选组件,那么您有更多的工作要做。这些都是:

  • 提振。IOStreams Bzip2过滤器
  • 提振。IOStreams Zlib过滤器
  • 提振。MPI
  • 提振。Python
  • 提振。Regex ICU支持

提振。IOStreams Bzip2过滤器:

  1. 将最新版本的bzip2库(编写时为1.0.6)源文件解压缩到您选择的目录(例如C:\bzip2-1.0.6)。
  2. 按照上面的第二组指令构建boost,但在第5步中运行b2时添加选项-sBZIP2_SOURCE="C:\bzip2-1.0.6"

提振。IOStreams Zlib过滤器

  1. 将zlib库的最新版本(编写时为1.2.5)的源文件解压缩到您选择的目录(例如C:\zlib-1.2.5)。
  2. 按照上面的第二组指令构建boost,但在第5步中运行b2时添加选项-sZLIB_SOURCE="C:\zlib-1.2.5"

提振。MPI

  1. 安装MPI发行版,如Microsoft计算集群包。
  2. 按照上述第二组指令中的步骤1 - 3来构建boost。
  3. 编辑目录<BOOST_PATH>中运行引导产生的文件project-config.jam。添加一行using mpi ;(注意';'前面的空格)。
  4. 按照上面第二组指令中的其余步骤来构建boost。如果自动检测MPI安装失败,则需要查找并修改适当的构建文件,以便在正确的位置查找MPI。

提振。Python

  1. 安装一个Python发行版,比如ActiveState的ActivePython。确保Python安装在您的PATH中。
  2. 要完全构建32位版本的库,需要32位Python, 64位版本也是如此。如果由于这种原因安装了多个版本,则需要告诉b2在哪里找到特定的版本以及何时使用哪个版本。一种方法是编辑目录<BOOST_PATH>中运行引导产生的文件project-config.jam。添加以下两行,根据Python安装路径进行适当调整&版本(注意';'前面的空格)。

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

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

    请注意,这种显式的Python规范目前会导致MPI构建失败。因此,如果你也在构建MPI,你需要做一些有规范和没有规范的单独构建来构建所有东西

  3. 按照上面的第二组说明来构建boost。

提振。Regex ICU支持

  1. 将ICU4C库的最新版本(编写时为4.8)的源文件解压缩到您选择的目录(例如C:\icu4c-4_8)。
  2. <ICU_PATH>\source\allinone中打开Visual Studio解决方案。
  3. 为调试和amp构建所有;为您选择的平台发布配置。可以有一个问题用Visual Studio 2010构建ICU4C的最新版本,当debug和amp的输出;发布版本都在同一个目录中(这是默认行为)。一个可能的解决方案是做一个Build All(调试构建),然后在第二个配置(例如发布构建)中做一个Rebuild All。
  4. 如果为x64构建,则需要运行x64操作系统,因为构建后的步骤涉及运行正在构建的一些64位应用程序。
  5. 完成后可选择删除源目录。
  6. 按照上面的第二组指令构建boost,但在第5步中运行b2时添加选项-sICU_PATH="C:\icu4c-4_8"

还有一个小提示:如果你想减少编译时间,你可以添加标志

j2

同时运行两个并行构建。这可能会减少到看一部电影;)

您还可以尝试-j%NUMBER_OF_PROCESSORS%作为参数,它将使用所有的内核。让我的四核速度超快。

我可以推荐以下技巧:创建一个特殊的boost.props文件

  1. 打开物业管理
  2. 右键单击项目节点,选择“添加新项目属性表”。
  3. 选择一个位置并命名您的属性表(例如:c:\mystuff\boost.props)
  4. 将附加的Include和Lib文件夹修改为搜索路径。

此过程的价值是仅在希望显式包含boost的项目中包含它。当你有一个使用boost的新项目时,请:

  1. 打开物业管理器。
  2. 右键单击项目节点,并选择“添加现有属性表”。
  3. 选择boost属性表。

编辑(以下编辑来自@jim-fred):

生成的boost.props文件看起来像这样…

<?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>

它包含一个用于boost目录位置的用户宏(在本例中为D:\boost_1_53_0)和另外两个参数:IncludePath和LibraryPath。语句#include <boost/thread.hpp>将在适当的目录中找到thread.hpp(在本例中为D:\boost_1_53_0\boost\thread.hpp)。'stage\lib\'目录可能会根据安装到的目录而改变。

这提振。props文件可以位于D:\boost_1_53_0\目录中。

在KTC非常翔实的主要回答中补充一点:

如果您正在使用免费的Visual Studio c++ 2010 Express,并设法获得了一个编译64位二进制文件的程序,现在想使用它来使用64位版本的Boost库,那么您最终可能会使用32位程序库(当然,您的情况可能有所不同,但在我的机器上这是令人遗憾的情况)。

我可以使用以下方法来修复这个问题:在上述步骤之间

  1. 启动32位MSVC命令提示符,并切换到解压缩Boost的目录。
  2. 运行:引导

我插入了一个调用“setenv”来设置环境。对于发布版本,上面的步骤变成:

  1. 启动32位MSVC命令提示符,并切换到解压缩Boost的目录。
  2. 运行:"C:\Program Files\Microsoft sdk \Windows\v7.1\Bin\setenv. "/Release /x64 . cmd
  3. 运行:引导
我在这里找到了这个信息: http://boost.2283326.n4.nabble.com/64-bit-with-VS-Express-again-td3044258.html < / p >

下面是我使用Boost的方法:

  1. 下载并解压zip版本的Boost库。
  2. 运行bootstrap.bat文件,然后运行bjam.exe。
  3. 等待大约30分钟左右。
  4. 在Visual Studio中创建一个新项目。
  5. 进入项目——>属性——>链接器——>通用——>附加库目录并将促进/ lib /阶段目录添加到其中。
  6. 进入项目——>属性——>C/ c++——>通用——>附加包括目录并将提高目录添加到其中。

您将能够毫无错误地构建您的项目!

下载促进从: http://www.boost.org/users/download/ 例如:通过SVN

  • Windows ->乌龟(最简单的方法)

之后: cmd ->进入boost目录(“D:\boostTrunk”-在那里您签出或下载并提取包): 命令: 引导< / >强

我们创建了bjam.exe in ("D:\boostTrunk") 之后: 命令: Bjam toolset=msvc-10.0 variant=debug,release threading=multi link=static (这将需要一些时间~20min.)

< p >之后: 打开Visual studio 2010 ->创建空项目->进入项目属性->设置:

项目属性VS 2010

粘贴此代码并检查它是否工作?

#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;
}
< p >资源: https://www.youtube.com/watch?v=5AmwIwedTCM < / p >

一个简单的例子,让你开始在Visual Studio:

1.下载和unzip Boost从这里。

2.创建一个Visual Studio空项目,使用一个不需要单独编译的示例boost库:

#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.在Visual Studio项目属性中设置附加包含目录:

项目属性

举个简单的例子:

如何在Visual Studio中安装Boost库

如果你不想使用整个boost库,只使用一个子集:

在Windows中使用boost库的子集

如果你现在特别想了解需要编译的库:

如何在Windows中使用Boost编译的库

这篇文章已经有一段时间了,我想我应该添加一些关于如何在特定的硬件上尽可能快地构建Boost的内容。

如果你有4核或6核,分别使用-j5或-j7。当然不是标准版本,也不是-j2,除非你确实有双核。

我在我的主站上运行了一个3930K(6核)库存的Sandy Bridge Extreme,但在旧的备份盒上有一个2600k(4核),趋势是我用N + 1构建进程获得了最佳的Boost编译时间,其中N是物理内核的数量。N+2达到收益递减点,时间增加。

注:超线程启用,32GB内存DDR3,三星840 EVO SSD。

-j7在6核(2分51秒)(Win7终极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在6核(3分2秒)(Win7终极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在6核(3分17秒)(Win7终极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

配置

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)

我注意到64位构建需要更长的时间,我需要对这些进行相同的比较和更新。

位于在这里的Windows安装程序非常适合我。我采取了以下步骤:

  1. 按照安装向导完成安装。
  2. 运行visual studio。
  3. 创建一个新的c++项目
  4. 打开项目属性(可以通过在解决方案资源管理器中右键单击项目名称来找到)
  5. 在“C/ c++ > General > Additional Include Directories”下添加boost根目录所在的路径。我的默认版本是C:\local\boost_1_63_0。“boost”后面的数字是boost的版本。
  6. 在项目属性中,在“链接器>附加库目录”下添加库文件的目录。我的默认版本是C:\local\boost_1_63_0\lib64-msvc-14.0。“lib”后面的数字与构建目标有关(在Visual Studio中是32位或64位),“msvc”后面的数字与Visual Studio的版本有关(14.0与Visual Studio 2015有关,但我将它与2017 Visual Studio一起使用)。

好运!

此外,还有一些东西我觉得很有用。为您的提升路径使用环境变量。(如何在窗口中设置环境变量,链接在底部7,8,10) BOOST_ROOT变量似乎是常见的地方了,它被设置为解压boost的根路径。

然后在属性,c++,通用,附加包含目录中使用$(BOOST_ROOT)。然后,如果/当您移动到boost库的新版本时,您可以更新环境变量以指向这个新版本。随着你的项目越来越多,使用boost,你将不必为所有的项目更新“附加包含目录”。

您还可以创建一个BOOST_LIB变量,并将其指向库暂存的位置。同样地,对于链接器->附加库目录,您不必更新项目。我有一些旧的东西用vs10和vs14建立了新的东西,所以建立了两个口味的boost lib到同一个文件夹。所以如果我把一个项目从vs10移动到vs14,我不需要改变提升路径。

注意:如果你改变了一个环境变量,它不会突然在一个开放VS项目中工作。VS在启动时加载变量。所以你需要关闭VS然后重新打开它。