如何在Visual Studio 2010中使用Boost

380

如何在Visual Studio的空项目中使用Boost库的详细步骤说明是什么?


4
开始在Windows上使用:本文介绍了如何在Windows平台上使用Boost C++库。它包括下载和安装Boost库,设置环境变量,以及编写和编译第一个简单的Boost程序的步骤。重点将放在使用Visual Studio和MinGW编译器上,同时也提到了其他一些编译器。最后还包括了一些常见问题和解决方法的链接,以便您在使用Boost时遇到问题时进行参考。 - user184968
13个回答

518

尽管Nate's answer已经很好了,但我会更加详细地解释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,然后选择属性以打开属性页进行编辑。
  5. 在左侧选择VC++目录
  6. 编辑包含目录部分以包括指向您的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. 运行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

去散步/看一两部电影……

  1. 按照上面的说明执行步骤2-6以设置环境变量。
  2. 编辑库目录部分,包括指向boost库输出的路径。(默认示例和说明的路径是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 过滤器
  • Boost.MPI
  • Boost.Python
  • Boost.Regex ICU 支持

Boost.IOStreams Bzip2 过滤器:

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

Boost.IOStreams Zlib 过滤器:

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

Boost.MPI

  1. 安装 MPI 发行版,例如 Microsoft Compute Cluster Pack。
  2. 按照上面第二个指令集的步骤 1-3 来构建 boost。
  3. 编辑目录 <BOOST_PATH> 中的文件 project-config.jam(该目录是运行 bootstrap 后的结果)。添加一行代码 using mpi ;(注意 ';' 前的空格)。
  4. 按照上面第二个指令集的其余步骤来构建 boost。如果 MPI 安装的自动检测失败,则需要查找和修改适当的构建文件以在正确的位置查找 MPI。

Boost.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。

Boost.Regex ICU支持

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

6
需要注意的是,您必须选择“工具”>“设置”>“专家模式”,才能看到属性表格。我曾经在谷歌上搜索了很久才找到这个方法... - Zack The Human
12
如果您想要同时安装x64和win32版本,请在相应的构建中添加"--stagedir=lib/win32"和"--stagedir=lib/x64"。请注意,这样做不会改变原始含义。 - M. Tibbits
3
这是一个视频教程,教你如何在Visual Studio 2010中构建和配置Boost库,你可以参考这个链接:http://www.youtube.com/watch?v=5AmwIwedTCM - Christophe
从视频中我没有看到任何针对x32 / x64的命令...我们真的需要输入那个版本吗?@M.Tibbits - gumuruh
如果你收到了以下错误信息:boost error: msvc initialization: parameter 'version' inconsistent,你可以只使用 --toolset=msvc 而不需要指定版本号。 - J3soon
显示剩余4条评论

159

虽然Boost网站上的指南很有帮助,但这里提供一个经过简化的版本,同时还能建立x64库。

  • 只需在使用了指南中第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位库

这将在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
  5. C:\Boost\include\boost-(version)添加到您的包含路径中。
  6. C:\Boost\lib\x64添加到您的lib路径中。

28
如果您不想自己构建它们,可以从SourceForge安装预编译的二进制文件:http://sourceforge.net/projects/boost/files/boost-binaries/ 对于每个版本的Boost,都有适用于每个Visual Studio版本(32位和64位)的安装程序。 - teeks99
1
在进行64位构建时,为什么要使用architecture=x86而不是architecture=x64?编辑:刚刚通过艰难的方式发现了:P你不能将其切换到64... - kayleeFrye_onDeck
嘿,@teeks99,我访问了你给出的链接,但是对于v1.4.7版本,我发现有太多文件,我应该使用哪一个呢?如果有一个适用于所有boost函数使用的单个文件(库/ dll)不是更好吗? - gumuruh
2
尝试访问https://sourceforge.net/projects/boost/files/boost-binaries/old-monolithic/,你应该能够在那里找到1.47.0的安装程序,具体取决于你需要32位还是64位。在其中你会发现很多DLL文件,这就是boost的工作方式。但是,只要你将Visual Studio项目指向正确的目录,它就不会在乎有多少个文件,因为它会自动选择所需的正确文件。 - teeks99

21

您还可以尝试将-j%NUMBER_OF_PROCESSORS%作为参数,它将使用您所有的核心。在我的四核处理器上,使事情变得超级快。


3
这是我最终采用的在VS2015上的组合操作:b2 -j%NUMBER_OF_PROCESSORS% toolset=msvc-14.0 --build-type=complete --libdir=C:\Boost\lib\x64 architecture=x86 address-model=64 install。将此乘以一百万即可得到结果。 - kayleeFrye_onDeck
对于PowerShell,它是:-j"$env:NUMBER_OF_PROCESSORS" - Oscillon

15
我可以建议以下技巧:创建一个特殊的boost.props文件。
  1. 打开属性管理器
  2. 右键单击项目节点,选择“添加新项目属性表”。
  3. 选择位置并命名属性表(例如c:\mystuff\boost.props)
  4. 修改附加包含和库文件夹的搜索路径。
这个过程的价值在于只在您想要显式包含它的项目中包含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>将在相应目录(在本例中为D:\boost_1_53_0\boost\thread.hpp)中找到thread.hpp。'stage\lib\'目录可能会根据安装地址而改变。

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


14

你需要Boost的哪些部分?许多东西是TR1的一部分,这是与Visual Studio一起提供的,因此你可以简单地说:

#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

7

这个帖子已经存在一段时间了,我想补充一些关于如何在特定硬件上尽可能快地构建Boost的内容。

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

我的主要工作站是Sandy Bridge Extreme,配备默认时钟的3930K(6核),而我的旧备份盒子是2600k(4核),趋势是我使用N + 1构建进程获得最佳的Boost编译时间,其中N是物理核心数。 N + 2达到收益递减点,时间会增加。

注:启用超线程技术,32GB RAM DDR3,三星840 EVO SSD。

-j7 on 6-core (2 minutes and 51 seconds) (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)

意思是使用-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 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位构建需要稍微多一点时间,我需要对这些进行相同的比较并更新。


6

从以下网址下载boost: http://www.boost.org/users/download/ 例如,通过svn下载。

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

之后: cmd -> 进入boost目录(“D:\ boostTrunk”-您检出或下载和提取包的位置): 命令: bootstrap

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

之后: 打开Visual Studio 2010 -> 创建空项目 -> 转到项目属性 -> 设置:

Project properties 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

这是一个关于IT技术的视频资源链接。请点击链接观看。

5

还有一点需要注意:如果您想缩短编译时间,可以添加标志

-j2

同时运行两个并行构建。这可能会将编译时间缩短到只看一个电影的时间;)。


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

5

以下是我如何使用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++ > General > Additional Include Directories"下添加boost根目录的路径。对于我的版本,默认路径为C:\local\boost_1_63_0。"boost"后面的数字是版本号。
  6. 在项目属性中,在"Linker > Additional Library Directories"下添加库文件目录。对于我的版本,默认路径为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配合使用)。
祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接