在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

这个过程可能会持续几个小时时间,因为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,然后点击右边的下载按钮即可。

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容