在Visual Sutdio 2017中使用boost库
在Visual Sutdio 2017中使用boost库
对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:\DevTools\boost_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_ROOT和BOOST_ROOT\libs两个文件夹。注意图中的语法,拼写正确才能正确将环境变量展开为实际路径。



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

配置完成后,就可以在项目中使用boost了。当然对于Visual Studio来说,还有更简单的办法,那就是使用NuGet。
使用NuGet添加
配置完之后,我还发现微软的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
---恢复内容结束---
在Visual Sutdio 2017中使用boost库的更多相关文章
- 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...
- 【C++】GSL(GNU Scientific Library) 的安装及在 Visual Studio 2017 中的使用
GSL 是 GNU 开发并维护的科学计算的库,其中包括: 复数 多项式的根 特殊函数 向量和矩阵 排列 排序 BLAS支持 线性代数 Eigensystems 快速傅立叶变换 正交 随机数 准随机序列 ...
- Visual Studio 2017中使用SourceLink调试ASP.NET Core源码
背景 当我们在学习ASP.NET Core或者调试ASP.NET Core程序的时候,有时候需要调试底层代码,但是当我们在Visual Studio中调试程序的时候,由于一些基础库或者第三方库缺少pd ...
- 【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...
- 在Visual studio 2017中使用EF6连接MySQL
在Visual studio 2017中使用EF6连接Mysql ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) ...
- Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法
Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法 先上个图.语法提示支持到 Microsoft Dynamics xRM API 8.2 也就是cr ...
- Visual studio 2017 中的Javascript智能提示与调试
1.智能提示 对于JS文件中的API,你若需要让那个JS文件中的方法能够在你写的那个JS文件中能够智能显示的话,直接把它拉进你的JS文件中就好了. 举个例子:你想 在你正在写的a.js文件中引用b.j ...
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
Visual Studio 2017中使用正则修改部分内容 最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...
- 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序
如何在Visual Studio 2017中使用C# 7+语法 前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...
随机推荐
- 在Winform开发框架中实现对数据库的加密支持(转)
在很多情况下,我们需要对数据库进行加密,特别是Access数据库.Sqlite数据库,这些直接部署在客户端的数据,因为数据也是客户的资产,数据库总是存在很多相关的秘密或者重要的业务数据,所以一般来说, ...
- ios 清除缓存文件
获取缓存文件的大小 由于缓存文件存在沙箱中,我们可以通过NSFileManager API来实现对缓存文件大小的计算. 计算单个文件大小 +(float)fileSizeAtPath:(NSStrin ...
- Oracle 查询优化的基本准则详解
注:报文来源:想跌破记忆寻找你 < Oracle 查询优化的基本准则详解 > Oracle 查询优化的基本准则详解 1:在进行多表关联时,多用 Where 语句把单个表的结果集最小化, ...
- Confluence 6 关于统一插件管理器
所有的组件通过 统一插件管理器(Universal Plugin Manager)进行管理,这个也被称为 UPM.UPM 可以在几乎所有的 Atlassian 应用中找到,能够提供完整同意的插件安装管 ...
- 【VBA】数组定义时,括号内的数值n为最大下标,其长度为n+1
定义数组 dim arr(9) as integer注意这是数组的长度为10,而9指的是最大下标值. 所以在redim和赋值的时候要特别小心,防止错位.
- ionic3 打包Xcode 9 Swift Language Version (SWIFT_VERSION) Ask 报错
解决方案 选择4.0 然后报错17个,类似以下这样的错误 'AVMediaTypeVideo' has been renamed to 'AVMediaType.video' 根据提示更改 AVMed ...
- mysql老是停止运行该怎么解决
你可能还会遇到无法启动mysql的错误 解决方法如下:
- Question Of AI Model Training
1 模型训练基本步骤 准备原始数据,定义神经网络结构及前向传播算法 定义loss,选择反向传播优化算法 生成Session,在训练数据进行迭代训练,使loss到达最小 在测试集或者验证集上对准确率进行 ...
- poj3162 树形dp|树的直径 + 双单调队列|线段树,好题啊
题解链接:https://blog.csdn.net/shiqi_614/article/details/8105149 用树形dp是超时的,, /* 先求出每个点可以跑的最长距离dp[i][0|1] ...
- favicon.ico--网站标题小图片二三事
前言: 什么是favicon? 直接用图说话:这个就是favicon favicon.ico 是一种格式,一般用于网页地址栏前或者在标签上以缩略方式显示网站标志,也可以拖曳favicon到桌面以建立到 ...