zoukankan      html  css  js  c++  java
  • 在Visual Sutdio 2017中使用boost库

    在Visual Sutdio 2017中使用boost库

    转载 https://blog.csdn.net/u011054333/article/details/78648294

    对C++有一定了解的同学一定听说过boost库,这是C++的一个著名类库,在C++的地位感觉可以和Spring在Java中相比。boost向来有准标准库之称,很多新特性例如智能指针等都是先在boost中实现,后来被吸收到标准库之中。而且boost实现了日志、算法、日期、地理、数学、线程协程等各种实用工具,所以如果要学习C++,boost是必须要学习的一个东西。

    安装boost

    下载boost

    boost官网是http://www.boost.org/,目前最新的版本是1.68,可以在这里下载。下载页面里有Unix和Windows的源码,以及Windows版本的预编译包。我们选择预编译下载。

    下载页面

    然后会弹出SourceForge的页面,按照自己的系统版本和Visual Studio版本选择最合适的版本下载,如果不确定的话,就下载all那个版本,是是最全的同时也是最大的。红框标的是适合Visual Studio 2017的64位boost库版本。后缀exe的是自解压安装包,下载之后打开它,选择一个目录,就会将预编译的boost库解压到那里。

    选择版本

    另外一种方式就是下载源码,下载完成后解压到一个目录,例如我就放到了D:DevToolsoost_1_68_0,目录结构如下图。如果用下载源码这种方式,那么后面必须执行编译这一个步骤。如果用的是预编译版本,则不需要编译。我推荐大家下载预编译的版本,因为编译这个过程实在是太慢了,没几个小时下不来。

    目录结构

    boost目录下是boost的头文件,libs下是boost的源代码。其他文件夹的内容是文档和一些工具等等,就不介绍了。

    添加环境变量

    将你放置boost代码的目录设置为环境变量BOOST_ROOT,这个目录将在后面用到。

    编译boost库

    首先确保你安装了Visual Studio 2017,并安装了 Visual Studio 2017 Developer Command Prompt工具。如果前面下载的是预编译版本,则不需要这个步骤。

    打开VS 2017 Developer Command Prompt,切换到boost目录,执行bootstrap.bat脚本,如果执行成功的话,会生成b2.exe等几个工具,这样生成工具的工作就完成了。

    然后简单调用生成的b2.exe就可以编译boost库了。

    b2.exe
    
    • 1

    这个过程可能会持续几个小时时间,因为boost库确实也是一个比较大的项目。当然编译这个步骤不是必须的,但是如果你想将来在项目中使用预编译的boost类库,那么这里就需要编译。或者也可以直接在下载的时候直接选择下载预编译的版本

    Visual Studio设置

    项目设置

    在VS中新建一个C++项目,然后打开项目属性页,然后切换到VC++目录,在包含目录和库目录中分别添加BOOST_ROOTBOOST_ROOTlibs两个文件夹。注意图中的语法,拼写正确才能正确将环境变量展开为实际路径。

    项目属性页

    包含目录

    库目录

    然后打开链接器配置,在附加库目录中添加对应的文件夹。如果使用的是预编译的boost,添加安装目录中的libXX-msvc-XXX(根据你下载的版本而不同),如果是自己源码编译的boost,添加stagelibs目录(这个是编译之后生成的目录)。

    链接路径

    配置完成后,就可以在项目中使用boost了。当然对于Visual Studio来说,还有更简单的办法,那就是使用NuGet。

    使用NuGet添加

    配置完之后,我还发现微软的NuGet竟然也可以添加boost。方法很简单,在项目菜单中点击管理NuGet包,然后搜索boost,然后点击右边的下载按钮即可。

    NuGet安装boost

    由于boost是一个比较大的库,所以这个安装过程可能需要多花费几分钟。安装完成后boost类库会放到项目文件夹的package文件夹中。NuGet会自动帮我们做所有工作,我们接下来直接使用就可以了。

    运行boost程序

    配置好之后,就可以运行boost程序了。下面是一个简单例子,使用了boost库的一些高精度(最大可达100位)数学常量(值得吐槽的是C++标准库居然没有像样的数学库,能用的只有<cmath>,而且甚至连PI常量都没有)。

    #include <boost/math/constants/constants.hpp>
    #include <boost/multiprecision/cpp_dec_float.hpp>
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    using namespace boost::math::constants;
    using namespace boost::multiprecision;
    
    int main()
    {
    	cout << "圆周率是:" << setprecision(50) << pi<cpp_dec_float_50>() << endl;
    	cout << "自然对数e是:" << setprecision(50) << e<cpp_dec_float_50>() << endl;
    	cout << "根号2是:" << setprecision(50) << root_two<cpp_dec_float_50>() << endl;
    	return 0;
    }
    // 圆周率π是:3.1415926535897932384626433832795028841971693993751
    // 自然对数e是:2.7182818284590452353602874713526624977572470937
    // 根号2是:1.4142135623730950488016887242096980785696718753769

    vs2015编译boost 64位

    ---恢复内容开始---

    step 1: 打开Developer Command Prompt for VS2015命令行窗口

    step 2: 执行bootstrap.bat,产生bjam.exe

    step 3:

      全部编译的命令行:bjam --toolset=msvc-14.0 --build-type=complete stage
      部分编译的命令行:bjam --toolset=msvc-14.0 --with-date_time --with-thread
      编译成64位的命令:bjam --toolset=msvc-14.0 address-model=64 --build-type=complete stage 
      查看需要编译库的命令行:bjam --show-libraries

         bjam --toolset=msvc-14.0 address-model=64 --with-date_time --with-thread  --with-chrono  link=static runtime-link=static --stagedir="./bin/vs15_64" release

    ---恢复内容结束---

     
  • 相关阅读:
    服务器选型:x86 vs 小型机谁更胜一筹?
    MySQL与PostgreSQL相比哪个更好?
    微服务架构优缺点
    聊聊Flume和Logstash的那些事儿
    HDFS文件系统
    阿里巴巴鹰眼技术解密
    OLAP、OLTP的介绍和比较
    storm架构及原理
    swift ClassNameFromString 的替换方法 + 创建TableviewHelper
    swift 屏幕的翻转 + 状态栏(statusBar)的隐藏
  • 原文地址:https://www.cnblogs.com/it-tsz/p/10739653.html
Copyright © 2011-2022 走看看