如何在Visual Studio 2010中使用Boost


Answers:


512

尽管Nate的答案已经很不错了,但我将根据要求针对Visual Studio 2010对其进行更具体的扩展,并在需要外部库的各种可选组件中包括有关编译的信息。

如果您仅使用标头库,那么您要做的就是取消存档boost下载并设置环境变量。下面的说明仅为Visual Studio设置环境变量,而不是整个系统。请注意,您只需要做一次。

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

如果要使用boost需要构建的部分,而又不使用需要外部依赖的功能,则构建起来非常简单。

  1. 将最新版本的boost(截至撰写时为1.47.0)解压缩到您选择的目录中(例如C:\boost_1_47_0)。
  2. 为您选择的平台启动Visual Studio命令提示符,然后导航到增强位置。
  3. 运行:bootstrap.bat生成b2.exe(以前称为bjam)。
  4. 运行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

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

  1. 从上面的指令集中执行步骤2-6,以设置环境变量。
  2. 编辑该Library Directories部分,以包含升压库输出的路径。(上面的示例和说明的默认C:\boost_1_47_0\stage\lib值为.。如果您希望将x86和x64并排(例如<BOOST_PATH>\lib\x86<BOOST_PATH>\lib\x64),请重命名并首先移动目录。
  3. 如果需要,针对您选择的不同平台重复步骤2-6。

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

  • Boost.IOStreams Bzip2过滤器
  • Boost.IOStreams Zlib过滤器
  • 增强MPI
  • Boost.Python
  • Boost.Regex ICU支持

Boost.IOStreams Bzip2过滤器:

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

Boost.IOStreams Zlib过滤器

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

增强MPI

  1. 安装MPI分发,例如Microsoft Compute Cluster Pack。
  2. 请按照上述第二组说明中的步骤1-3进行增强。
  3. project-config.jam<BOOST_PATH>运行引导程序后的目录中编辑文件。在读取的行中添加using mpi ;(注意“;”之前的空格)。
  4. 请按照上述第二组说明中的其余步骤进行操作,以增强效果。如果无法自动检测到MPI安装,则需要查找并修改适当的构建文件以在正确的位置查找MPI。

Boost.Python

  1. 安装Python发行版,例如ActiveState的ActivePython。确保Python安装在您的PATH中。
  2. 要完全构建该库的32位版本,需要32位Python,对于64位版本也是如此。如果出于这种原因安装了多个版本,则需要告诉b2在哪里可以找到特定版本以及何时使用哪个版本。一种方法是project-config.jam<BOOST_PATH>运行引导程序后编辑目录中的文件。添加以下两行,以根据您的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. 在中打开Visual Studio解决方案<ICU_PATH>\source\allinone
  3. 为您选择的平台进行调试和发布配置的全部构建。当调试和发布版本的输出都位于同一目录(这是默认行为)时,使用Visual Studio 2010构建ICU4C的最新版本可能会出现问题。可能的解决方法是先进行全部构建(例如调试版本),然后在第二配置中进行全部重建(例如,发行版本)。
  4. 如果要针对x64进行构建,则需要运行x64 OS,因为其中的后期构建步骤涉及运行其正在构建的某些64位应用程序。
  5. 完成后,有选择地删除源目录。
  6. 遵循上面的第二组指令来构建boost,但是-sICU_PATH="C:\icu4c-4_8"在步骤5中运行b2时添加该选项。

@索林:为什么你要改变它?
jalf

6
应该注意的是,您必须选择“工具”>“设置”>“专家模式”才能看到属性表。带我一些谷歌搜索终于找到了...
Zack The Human

@KTC:实际上是“专家设置”,可从“工具”>“设置”菜单中获得。我正在运行VSC ++ 2010 Express Edition,并且未激活“专家设置”就看不到属性表。
Zack The Human

11
如果要同时使用x64和Win32,则将“ --stagedir = lib / win32”和“ --stagedir = lib / x64”添加到各自的版本中。
M. Tibbits,2010年

3
有关如何为Visual Studio 2010构建和配置增强功能的视频教程,这可能会有所帮助:youtube.com/watch?v=5AmwIwedTCM
Christophe

158

虽然说明书上的升压网站是有帮助的,这里是一个浓缩版,也是建立64个库。

  • 仅当使用说明页面第3节中提到的库之一时,才需要这样做。(例如,使用Boost.Filesystem需要编译。)如果不使用其中任何一个,只需解压缩并执行即可。

建立32位库

这将在下安装Boost头文件,在下安装C:\Boost\include\boost-(version)32位库C:\Boost\lib\i386。请注意,这些库的默认位置是,C:\Boost\lib但是i386如果您打算为多种体系结构构建,则需要将它们放在目录下。

  1. 将Boost解压缩到新目录中。
  2. 启动一个32位MSVC命令提示符,并更改为Boost解压缩的目录。
  3. 跑: bootstrap
  4. 跑: 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
  5. 添加C:\Boost\include\boost-(version)到您的包含路径。

  6. 添加C:\Boost\lib\i386到您的库路径。

构建64位库

这将在下安装Boost头文件,在下安装C:\Boost\include\boost-(version)64位库C:\Boost\lib\x64。请注意,这些库的默认位置是,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
  5. 添加C:\Boost\include\boost-(version)到您的包含路径。
  6. 添加C:\Boost\lib\x64到您的库路径。

24
如果您不想自己构建它们,则可以从sourceforge安装预构建的二进制文件:sourceforge.net/projects/boost/files/boost-binaries对于boost的每个版本,每个Visual Studio版本都有安装程序(在32位和64位)。
teeks99

在执行64位构建时,为什么使用Architecture = x86而不是Architecture = x64的原因是什么?编辑:刚发现困难的方法:P您不能将其切换到64 ...
kayleeFrye_onDeck

嘿,@ teeks99我访问了给出的链接,但对于v1.4.7版本,我发现太多文件,无论如何我应该使用哪个文件?如果有一个适合所有boost功能使用的文件(库/ dll),这不是更好吗?
gumuruh

2
尝试sourceforge.net/projects/boost/files/boost-binaries/…,您应该能够在其中找到1.47.0的安装程序,具体取决于您需要32位还是64位。在其中,您会发现很多DLL,这就是boost的工作方式。但是,只要将Visual Studio项目指向正确的目录,其中的目录数量就无关紧要,因为它将自动选择所需的正确目录。
teeks99 2013年

20

您也可以尝试-j%NUMBER_OF_PROCESSORS%作为参数,它将使用您的所有内核。使事情在我的四核上超级快。


3
这是一百万倍。。。这是我最终为VS2015共同努力的结果:b2 -j%NUMBER_OF_PROCESSORS%toolset = msvc-14.0 --build-type = complete --libdir = C:\ Boost \ lib \ x64体系结构= x86地址模型= 64安装
kayleeFrye_onDeck

对于powershell,它是:-j“ $ env:NUMBER_OF_PROCESSORS”
Oscillon

14

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

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

此过程的价值在于,boost仅包含在您要明确包含它的项目中。当您有一个使用boost的新项目时,请执行以下操作:

  1. 打开属性管理器。
  2. 右键单击项目节点,然后选择“添加现有属性表”。
  3. 选择升压属性表。

编辑(来自@ 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>

它包含用于提升目录位置的用户宏(在本例中为D:\ boost_1_53_0)以及其他两个参数:IncludePath和LibraryPath。一条语句#include <boost/thread.hpp>将在适当的目录(本例中为D:\ boost_1_53_0 \ boost \ thread.hpp)中找到thread.hpp。“ stage \ lib \”目录可能会更改,具体取决于安装到的目录。

该boost.props文件可以位于D:\boost_1_53_0\目录中。


13

您需要Boost的哪些部分?Visual Studio随附的TR1包含很多内容,因此您可以简单地说,例如:

#include <tr1/memory>

using std::tr1::shared_ptr;

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

#include <memory>

using std::shared_ptr;

5
在VS2010中,将成为C ++ 0x一部分的TR1库全部移入std命名空间,就像它们在C ++ 0x标准中一样。(我认为它们也可能在std::tr1名称空间中,以实现向后兼容)。
James McNellis

6

这个线程已经存在了一段时间,我想我应该添加一些有关如何在特定硬件上尽快构建Boost的方法。

如果您有4核或6核,请分别使用-j5或-j7。除非您确实具有双核,否则肯定不是标准版本或-j2。

我在主站上运行的Sandy Bridge Extreme的主时钟频率为3930K(6核),但在较旧的备份盒上的时钟为2600k(4核),趋势是我使用N +获得最佳的Boost编译时间1个构建过程,其中N是物理核心数。N + 2到达收益递减点,时间增加。

注意:已启用超线程,32GB RAM DDR3,Samsung 840 EVO SSD。

-j7于6核(2分51秒)(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于6核(3分2秒)(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 6核(3分17秒)(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建立在6核上

设定档

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位版本需要更长的时间,我需要对它们进行相同的比较并进行更新。


5

还要注意一点:如果要减少编译时间,可以添加标志

-j2

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


2
解释如何使用-j2将增加您的答案的价值。
ST3

5

从以下网址下载增强功能:http : //www.boost.org/users/download/, 例如svn

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

之后:cmd->转到boost目录(“ D:\ boostTrunk”-您在其中签出或下载并解压缩包):command: bootstrap

我们在(“ D:\ boostTrunk”)中创建了bjam.exe,之后:命令: bjam toolset = msvc-10.0 variant = debug,释放线程= multi link = static (这需要一些时间〜20min。)

之后:打开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;
}

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


4

这是我如何使用Boost的方法:

  1. 下载并解压缩Boost库的zip版本。
  2. 运行bootstrap.bat文件,然后运行bjam.exe。
  3. 等待大约30分钟左右。
  4. 在Visual Studio中创建一个新项目。
  5. 转到项目->属性->链接器->常规->附加库目录,然后向其中添加boost / stage / lib目录。
  6. 转到项目->属性-> C / C ++->常规->其他包含目录,然后向其中添加boost目录。

您将能够构建您的项目而不会出现任何错误!


3

此处的Windows安装程序非常适合我。我采取了以下步骤:

  1. 遵循安装向导,直到完成。
  2. 运行Visual Studio。
  3. 创建一个新的C ++项目
  4. 打开项目属性(可以通过在解决方案资源管理器中右键单击项目名称来找到)
  5. 在“ C / C ++>常规>其他包含目录”下,在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一起使用)。

祝好运!


2

KTC非常有用的主要答案的一小部分内容:

如果您使用的是免费的Visual Studio c ++ 2010 Express,并且设法使该编译器编译64位二进制文​​件,而现在又想使用它来使用Boost库的64位版本,则最终可能会得到32位位库(当然,您的里程可能会有所不同,但是在我的机器上,这是可悲的情况)。

我可以使用以下方法解决此问题:在上述步骤之间

  1. 启动一个32位MSVC命令提示符,并更改为Boost解压缩的目录。
  2. 运行:引导程序

我插入了对“ setenv”的调用以设置环境。对于发布版本,上述步骤变为:

  1. 启动一个32位MSVC命令提示符,并更改为Boost解压缩的目录。
  2. 运行:“ C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ setenv.cmd” /发布/ x64
  3. 运行:引导程序

我在这里找到此信息:http : //boost.2283326.n4.nabble.com/64-bit-with-VS-Express-again-td3044258.html


您知道这是否适用于VS2015社区版吗?尽管提供了“ address-model = 64”,我似乎最终还是使用了32位二进制文​​件
paxos1977

@ paxos1977对不起,我不知道-我自己还没有尝试过VS2015。
ecotax 2015年

它绝对适用于VS 2015 Express for Desktop版,我自己经历过。setenv的替代方法是调用“ vcvarsall x86_amd64”
introiboad

1

一个使您开始使用Visual Studio的极简示例:

1. 从此处下载并解压Boost。

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

#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编译的库


0

另外,我发现有些东西非常有用。使用环境变量作为提升路径。(如何在Windows中设置环境变量,底部链接为7,8,10) BOOST_ROOT变量似乎已经很常见了,并设置为您解压boost的根路径。

然后在“属性”,“ c ++”,“常规”中,使用“其他包含目录” $(BOOST_ROOT)。然后,如果/当您移至boost库的较新版本时,可以更新环境变量以指向该较新版本。随着您的项目越来越多,使用boost,您将不必为所有项目都更新“其他包含目录”。

您还可以创建BOOST_LIB变量并将其指向暂存库的位置。因此,对于链接程序->其他库目录,您也不必更新项目。我有一些用vs10构建的旧内容,以及用vs14构建的新内容,因此将boost lib的两种风格都构建到了同一文件夹中。因此,如果我将项目从vs10移至vs14,则无需更改提升路径。

注意:如果更改环境变量,则它在打开的VS项目中不会突然起作用。VS在启动时加载变量。因此,您将不得不关闭VS并重新打开它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.