首页 文章

如何在Visual Studio 2010中使用Boost

提问于
浏览
358

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

13 回答

  • 502

    虽然Nate's answer已经非常好了,但我将根据要求更具体地针对Visual Studio 2010进行扩展,并包含有关在需要外部库的各种可选组件中进行编译的信息 .

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

    • 将最新版本的boost(写入时为1.47.0)解压缩到您选择的目录中(例如 C:\boost_1_47_0 ) .

    • 在Visual Studio中创建一个新的空项目 .

    • 打开Property Manager并展开您选择的平台的其中一个配置 .

    • 选择并右键单击 Microsoft.Cpp.<Platform>.user ,然后选择 Properties 以打开要编辑的属性页 .

    • 选择左侧的 VC++ Directories .

    • 编辑 Include Directories 部分以包含增强源文件的路径 .

    • 如果需要,对您选择的不同平台重复步骤3 - 6 .

    如果你想使用需要构建的boost部分,但没有任何需要外部依赖的功能,那么构建它非常简单 .

    • 将最新版本的boost(写入时为1.47.0)解压缩到您选择的目录中(例如 C:\boost_1_47_0 ) .

    • 为您选择的平台启动Visual Studio命令提示符并导航到boost所在的位置 .

    • 运行: bootstrap.bat 构建b2.exe(以前命名为bjam) .

    • 运行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 / ....

    • 从上面的指令集中执行步骤2 - 6以设置环境变量 .

    • 编辑 Library Directories 部分以包含boost库输出的路径 . (以上示例和说明的默认值为 C:\boost_1_47_0\stage\lib . 如果要并排x86和x64(例如 <BOOST_PATH>\lib\x86<BOOST_PATH>\lib\x64 ),请先重命名并移动目录 .

    • 如果需要,对您选择的不同平台重复步骤2 - 6 .

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

    • Boost.IOStreams Bzip2过滤器

    • Boost.IOStreams Zlib过滤器

    • Boost.MPI

    • Boost.Python

    • Boost.Regex ICU支持

    Boost.IOStreams Bzip2过滤器:

    • 将最新版本的bzip2库(编写时为1.0.6)源文件解压缩到您选择的目录中(例如 C:\bzip2-1.0.6 ) .

    • 按照上面的第二组说明构建boost,但在步骤5中运行b2时添加选项 -sBZIP2_SOURCE="C:\bzip2-1.0.6" .

    Boost.IOStreams Zlib过滤器

    • 将最新版本的zlib库(编写时为1.2.5)源文件解压缩到您选择的目录中(例如 C:\zlib-1.2.5 ) .

    • 按照上面的第二组说明构建boost,但在步骤5中运行b2时添加选项 -sZLIB_SOURCE="C:\zlib-1.2.5" .

    Boost.MPI

    • 安装MPI发行版,例如Microsoft Compute Cluster Pack .

    • 按照上面第二组说明中的步骤1 - 3进行构建增强 .

    • 编辑运行bootstrap导致的目录 <BOOST_PATH> 中的文件 project-config.jam . 添加一行读取 using mpi ; (注意';'之前的空格) .

    • 按照上面第二组说明中的其余步骤构建boost . 如果MPI安装的自动检测失败,那么您需要查找并修改相应的构建文件以在正确的位置查找MPI .

    Boost.Python的

    • 安装Python发行版,例如ActiveState的ActivePython . 确保Python安装在PATH中 .

    • 完全构建32位版本的库需要32位Python,类似于64位版本 . 如果由于这个原因安装了多个版本,则需要告诉b2在哪里可以找到特定版本以及何时使用哪个版本 . 一种方法是编辑运行bootstrap导致的目录 <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,那么您需要使用和不使用规范来构建一些单独的构建来构建所有内容 .

    • 按照上面的第二组说明构建boost .

    Boost.Regex ICU支持

    • 将最新版本的ICU4C库(写入时为4.8)源文件解压缩到您选择的目录中(例如 C:\icu4c-4_8 ) .

    • <ICU_PATH>\source\allinone 中打开Visual Studio解决方案 .

    • Build All用于您选择的平台的调试和发布配置 . 最近可以 Build a problem当调试和发布版本的输出位于同一目录(这是默认行为)时,使用Visual Studio 2010发布ICU4C . 一种可能的解决方法是执行Build All(调试构建说),然后在第二个配置中执行Rebuild all(例如,发布版本) .

    • 如果为x64构建,那么'll need to be running x64 OS as there'的构建后步骤涉及运行它正在构建的一些64位应用程序 .

    • 完成后,可以选择删除源目录 .

    • 按照上面的第二组说明构建boost,但在步骤5中运行b2时添加选项 -sICU_PATH="C:\icu4c-4_8" .

  • 13

    虽然Boost网站上的instructions是有用的,但这里是一个精简版本,它也构建了x64库 .

    • 如果您使用说明页面section 3中提到的库之一,则只需执行此操作 . (例如,使用Boost.Filesystem需要编译 . )如果你没有使用任何这些,只需解压缩然后去 .

    构建32位库

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

    • 解压缩到一个新目录 .

    • 启动32位MSVC命令提示符并切换到解压缩Boost的目录 .

    • 运行: bootstrap

    • 运行: 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

    • C:\Boost\include\boost-(version) 添加到包含路径 .

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

    构建64位库

    这将安装 C:\Boost\include\boost-(version) 下的Boost头文件和 C:\Boost\lib\x64 下的64位库 . 请注意,库的默认位置是 C:\Boost\lib ,但如果您计划为多个体系结构构建,则需要将它们放在 x64 目录下 .

    • 解压缩到一个新目录 .

    • 启动64位MSVC命令提示符并切换到解压缩Boost的目录 .

    • 运行: bootstrap

    • 运行: 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

    • C:\Boost\include\boost-(version) 添加到包含路径 .

    • C:\Boost\lib\x64 添加到libs路径 .

  • 4

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

  • 4

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

    • 打开 properties 经理

    • 右键单击项目节点,然后选择'Add new project property sheet' .

    • 选择一个位置并命名您的属性表(例如c:\ mystuff \ boost.props)

    • 将其他Include和Lib文件夹修改为搜索路径 .

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

    • 打开 properties 经理 .

    • 右键单击项目节点,然后选择'Add existing property sheet' .

    • 选择提升属性表 .

    编辑(从@ 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> 会在相应的目录中找到thread.hpp(在本例中为D:\ boost_1_53_0 \ boost \ thread.hpp) . 'stage\lib'目录可能会根据安装目录而更改 .

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

  • 5

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

    #include <tr1/memory>
    
    using std::tr1::shared_ptr;
    

    根据詹姆斯的说法,这也应该有效(在C 0x中):

    #include <memory>
    
    using std::shared_ptr;
    
  • 149

    这个帖子已经有一段时间了,我想我会在你的特定硬件上尽可能快地添加一些关于如何构建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 on 6-core (3 minutes and 2 seconds) (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 on 6-core (3 minutes and 17 seconds) (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

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

    -j2

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

  • 0

    这是我能够使用的方式促进:

    • 下载并解压缩Boost库的zip版本 .

    • 运行bootstrap.bat文件,然后运行bjam.exe .

    • 等待大约30分钟左右 .

    • 在Visual Studio中创建一个新项目 .

    • 转到项目 - >属性 - >链接器 - >常规 - >其他库目录,并向其添加boost / stage / lib目录 .

    • 转到项目 - >属性 - > C / C - >常规 - >其他包含目录并向其添加boost目录 .

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

  • 13

    从以下网址下载提升: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,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

  • 18

    位于here的Windows安装程序对我来说非常合适 . 我采取了以下步骤:

    • 按照安装向导进行操作 .

    • 运行visual studio .

    • 创建一个新的C项目

    • 打开项目属性(可以通过右键单击解决方案资源管理器中的项目名称找到)

    • 在"C/C++ > General > Additional Include Directories"下添加boost根目录所在的路径 . 我的版本默认为C:\ local \ boost_1_63_0 . "boost"之后的数字是boost的版本 .

    • 在项目属性中,在"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) .

    祝好运!

  • 3

    KTC非常有用的主要答案:

    如果您正在使用免费的Visual Studio c 2010 Express,并设法使用它来编译64位二进制文件,现在想使用它来使用64位版本的Boost库,那么最终可能会使用32-比特库(你的里程可能会有所不同,但在我的机器上这是一个悲伤的情况) .

    我可以使用以下方法解决这个问题:在上面描述的步骤之间

    • 启动32位MSVC命令提示符并切换到解压缩Boost的目录 .

    • 运行:bootstrap

    我插入了对'setenv'的调用来设置环境 . 对于发布版本,上述步骤变为:

    • 启动32位MSVC命令提示符并切换到解压缩Boost的目录 .

    • 运行:"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\setenv.cmd" / Release / x64

    • 运行:bootstrap

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

  • 2

    开始使用Visual Studio的简约示例:

    1. Download并从这里解压缩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项目属性中设置其他包含目录:

    Project Properties

    一个非常简单的例子:

    How to Install the Boost Libraries in Visual Studio

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

    Using a subset of the boost libraries in Windows

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

    How to use the Boost compiled libraries in Windows

  • 1

    另外,我发现有一些非常有用的东西 . 使用环境变量作为增强路径 . (How to set environment variables in windows, link at bottom for 7,8,10) BOOST_ROOT变量似乎已经很常见,并且设置为解压缩提升的根路径 .

    然后在Properties,c,general,Additional Include Directories中使用 $(BOOST_ROOT) . 然后,如果/当您移动到较新版本的boost库时,您可以更新环境变量以指向此较新版本 . 作为更多的项目,使用boost你不必为所有项目更新'Additional Include Directories' .

    您还可以创建一个BOOST_LIB变量并将其指向libs所在的位置 . 同样对于链接器 - >附加库目录,您不必更新项目 . 我有一些用vs10构建的旧东西和vs14的新东西,因此将boost lib的两种风格构建到同一个文件夹中 . 因此,如果我将项目从vs10移动到vs14,我不必更改增强路径 .

    注意:如果更改环境变量,它将不会突然在打开的VS项目中工作 . VS在启动时加载变量 . 所以你必须关闭VS并重新打开它 .

相关问题