在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:\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_ROOTBOOST_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库的更多相关文章

  1. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  2. 【C++】GSL(GNU Scientific Library) 的安装及在 Visual Studio 2017 中的使用

    GSL 是 GNU 开发并维护的科学计算的库,其中包括: 复数 多项式的根 特殊函数 向量和矩阵 排列 排序 BLAS支持 线性代数 Eigensystems 快速傅立叶变换 正交 随机数 准随机序列 ...

  3. Visual Studio 2017中使用SourceLink调试ASP.NET Core源码

    背景 当我们在学习ASP.NET Core或者调试ASP.NET Core程序的时候,有时候需要调试底层代码,但是当我们在Visual Studio中调试程序的时候,由于一些基础库或者第三方库缺少pd ...

  4. 【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  5. 在Visual studio 2017中使用EF6连接MySQL

    在Visual studio 2017中使用EF6连接Mysql ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) ...

  6. Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法

    Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法 先上个图.语法提示支持到 Microsoft Dynamics xRM API 8.2 也就是cr ...

  7. Visual studio 2017 中的Javascript智能提示与调试

    1.智能提示 对于JS文件中的API,你若需要让那个JS文件中的方法能够在你写的那个JS文件中能够智能显示的话,直接把它拉进你的JS文件中就好了. 举个例子:你想 在你正在写的a.js文件中引用b.j ...

  8. Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作

    Visual Studio 2017中使用正则修改部分内容   最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...

  9. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

随机推荐

  1. hash·余数hash和一致性hash

    网站的伸缩性架构中,分布式的设计是现在的基本应用. 在memcached的分布式架构中,key-value缓存的命中通常采用分布式的算法 一.余数Hash     简单的路由算法可以使用余数Hash: ...

  2. PHP7运行环境搭建(Windows7)

    注:本文来源于<    PHP7运行环境搭建(Windows7)   > php7号称能直追facebook的HHVM,为了体验一把传说中的高性能,我特意在本地电脑上尝试着安装了php7, ...

  3. LeetCode(101):对称二叉树

    Easy! 题目描述: 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2, ...

  4. Windows 系统共享文件扫描

    近年来历次泄露的安全事故(工控安全),其主要原因就是内部网络自身的脆弱性问题.对于内部网络的安全检查是很必要的.传统上使用CMD命令  net view 就可以扫描在线的主机但是,主机设置取消QOS的 ...

  5. python(2): If/for/函数/try异常/调试/格式输出%

    (一) if  if a1==a2: print('ok') if:  else: if: elif: ... else:  注意缩进 猜数字游戏 from random import randint ...

  6. JS中----this的指向和如何修改this的指向

    this this是js中的一个关键字,函数运行时自动生成的一个内部对象,只能在函数内部使用.我们要讨论的是 this 的指向. this就是函数运行时自动生成的一个内部对象 下面介绍一下几种情况下, ...

  7. D.Starry的神奇魔法(矩阵快速幂)

    /*D: Starry的神奇魔法 Time Limit: 1 s      Memory Limit: 128 MB Submit My Status Problem Description     ...

  8. 20165206 2017-2018-2 《Java程序设计》第二周学习总结

    20165205 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 java语言共有8种基本数据类型,分别是boolean.byte.short.char.in ...

  9. OpenCV-Python入门教程3-图像基本操作(访问像素点/ROI/通道分离)

    一.获取和修改像素点的值 import cv2img = cv2.imread('lena.jpg') # 100, 90表示行列坐标 px = img[100, 90] print(px) # 获取 ...

  10. PyTorch中的backward [转]

    转自:https://sherlockliao.github.io/2017/07/10/backward/ backward只能被应用在一个标量上,也就是一个一维tensor,或者传入跟变量相关的梯 ...