Boost的介绍、安装与环境配置

Boost的介绍、安装与环境配置

文章目录

一、Boost库简介二、Boost的安装与编译(一)下载解压(二)编译静态库

三、配置VS环境四、其它环境的配置(vscode、DevC++)(一)在DEVC++中配置使用boost库的环境(二)在vscode中使用boost库

五、Linux下boost库安装过程附录:测试代码

一、Boost库简介

1998 年,Beman G.Dawes(C++标准委员会成员之一)发起倡议并建立了Boost 社区,其目的是向C++程序员提供免费的、经同行审查的、可移植的、高质量的C++源程序库。

Boost库是一款高效的C++跨平台开发库。Boost库官方版提供了丰富的模板类和函数接口,并实现了诸如智能指针、容器、算法等常用功能。Boost库还支持多种操作系统和编译器环境,并提供了详细文档和示例代码以便用户进行快速学习和上手使用

它使得C++编程更优雅、更有活力、更高产,C++11的标准有三分之二来自boost库。Boost 程序库可以与C++标准库很好地共同工作,因此Boost库可以适合最后的标准化。

二、Boost的安装与编译

(一)下载解压

官网地址:

http://www.boost.org/

用官网的话可能下载不了,因为国内限制访问不了,咱搞这些的基本上都这样,可以用下面这个:

Boost C++ Library - 在 SourceForge.net 浏览 /boost-binaries

为了稳定,我就没选最新版的

下载后解压到自己喜欢的路径就行了

解压后可以看到整体一个结构:

最上层结构

#存放配置脚本和说明文件

├── boost # 最重要的目录,90%以上的Boost程序库源码都在这里

├── doc # HTML 格式的文档,也可以生成PDF格式文档

├── libs # 所有组件的示例、测试、编译代码和说明文档

├── more # 库作者相关的文档

├── status # 用于测试Boost库的各个组件

└── tools # b2、quickbook等自带工具

Boost目录结构:(在大多数情况下,我们只需要关心boost子目录,这里面以头文件的形式分门别类地存放了我们要使用的库代码)

├── accumulators # 累加器库

├── algorithm # 算法库

├── align # 内存对齐库

├── archive # 序列化库

├── asio # 异步并发库

├── assert # 断言库

├── assign # 赋值初始化库

├── atomic # 原子操作库

├── beast # 高级网络通信库

├── bimap # 双向关联数组

├── bind # bind表达式

├── chrono # 时间处理库

... # 其他库

├── python # python库 (把C++类和函数映射到Python之中)

├── yap # 表达式模板库

...

(二)编译静态库

boost库的大多数组件不需要编译链接,我们在自己的源码里面直接包含头文件即可,如,如果使用boost::timer,只需要写以下的语句即可(在ide环境中要先配置下环境,在第三步中会提到)

#include

using namespace boost

1.Boost库的头文件与我们平常所用的头文件(*.h)或C++标准库的头文件(没有后缀名)不同,这正是Boost的独特之处。它把C++类的声明和实现放在了一个文件中,而不是分成两个文件,即.h+.cpp,故文件的后缀是.hpp。 2.这里需要说明一下,刚开始拿到压缩包解压后,想着能够像GDAL库一样,直接拷贝到工程目录下进行包含引用。然而发现引用进去文件报错不能打开。 所以boost库不能直接拷贝进去使用,对于有些文件还是需要编译一下静态库进而引用的。这里的编译与GDAL和OpenCV的安装有一定的区别,这里的编译安装,只是在对应的文件下生成静态库。

第一步:下载解压完成后有个bootstrap.bat文件,双击执行,会生成一个b2.exe文件;不行的话进到cmd里面,然后进到这个目录下输入bootstrap.bat运行也可以:

第二步:双击b2.exe运行:等待程序编译完成,会在目录下生成bin.v2和stage两个文件夹,其中bin.v2下是生成的中间文件,大小在2.4G左右,可以直接删除。stage下才是生成的lib文件。文件如下:

说明:

这里通过双击b2.exe进行编译的,默认在stage下生成lib文件夹,里面只包含着静态库。如果想要生成dll动态库,可./b2 --help查看参数说明,然后需要输入相应的编译命令如:

./b2 toolset=msvc-14.1 link=static runtime-link=shared threading=multi variant=debug

其中

toolset:指定编译器,可选的如minGW、msvc等。

vs2008 : msvc-9.0,

vs2010 : msvc-10.0,

VS2012、VS2013:msvc-12.0

vs2017 : msvc-14.1,

vs2015 : msvc-14.0,

linux :gcc

link:生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。

runtime-link:动态/静态链接运行时库。同样有shared和static两种方式,标记如何连接C++运行库,是包含就用静态,使用系统运行库就用动态。

threading:单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。

variant:编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。

所以如果需要生成dll,可以使用link=shared方式生成。参考Boost编译与使用 - 知乎

生成文件命名说明:

以“lib”开头的是“link=static”版本(静态链接库版本,没有dll),而直接以“boost”开头的是“link=shared”版本(动态链接库版本,包含lib和dll)。所有的库都含有"boost"前缀。紧随其后的是boost库名称(比如date_time库)。然后是编译器的版本,与库名称之间以"-“而不是下划线”_"分隔(比如 -vc120)。有“mt”的为“threading=multi”版本,没有的则是“threading=single”版本。有“s”的为“runtime-link=static”版本,没有的则是“runtime-link=shared”版本。有“gd”的为debug版本,没有的则是release版本。所有的库都含有boost库的版本号结尾(比如1_56,其中的".“以下划线”_"代替)

三、配置VS环境

1、项目 (右键) --> 属性

2、点击VC++目录:

包含目录:添加自己boost的目录,例:E:\Mingw\boost_1_78_0库目录:添加自己boost编译后stage下的静态库,例:E:\Mingw\boost_1_78_0\stage\lib

3、点击链接器 --> 常规 --> 附加库目录:同样添加静态库目录,例:E:\Mingw\boost_1_78_0\stage\lib

4、完成,测试,测试代码放在最后

包含目录:

库目录:

链接器 --> 附加库目录:

四、其它环境的配置(vscode、DevC++)

(一)在DEVC++中配置使用boost库的环境

在编译器选项中:

在目录-C++包含文件中,设置boost库的地址,注意是里面boost目录的上层地址。

这个设置的是包含文件,可以认为是头文件,此外我们可能还需要用到静态库,因此我们还需要设置一下静态库文件路径。

通过上面两步,我们就设置好了在DEVC++下的使用环境。

(二)在vscode中使用boost库

本来应该是在这里面配置包含目录的,但是不知道为啥一直报错fatal error: boost/config.hpp: No such file or directory,读者可以试试

"includePath": [

"${workspaceFolder}/**",

"E:/wenjian/cs/code/boost_1_76_0_2/boost_1_76_0/"

]

所以,没办法,我把boost目录拷贝到D:\MinGW\include,即gcc编译器的标准包含文件中,发现是可以正常运行的。

运行生成任务成功

五、Linux下boost库安装过程

一、下载最新的 boost 库

二、在适当的位置解压 boost 库,推荐把 boost 库解压到 /usr/local/ 下: (安装发现没拷贝到这目录是不行的)

三、在Boost解压缩后的目录下直接执行以下命令:./bootstrap.sh;再执行./b2 install

第一条命令 bootstrap.sh 是编译前的配置工作,第二条命令才开始真正地编译并安装Boost。 如果像上面这样不指定额外选项,Boost将编译release版本的库文件,把头文件安装到“/usr/local/include”中,把库文件安装到“/usr/local/lib”中。

四、可以加参数指定我们的编译操作

完全编译:./bootstrap --buildtype=complete install

定制编译:

./b2 --show-libraries:可查看所有必须编译后才能使用的库。

./b2 --with-date_time --buildtype=complete install:在完全编译命令的基础上,使用–with或–without选项可打开或关闭某个库的编译,执行上述命令将编译安装date_time库

完整编译Boost费时费力,而且在开发过程中这些库并不会全部用到,因此,Boost允许用户自行选择用户要编译的库。

五、编译验证:同样参考附录代码

附录:测试代码

#include

#include

#include

using namespace std;

int main()

{

cout<

cout<

cout<

cout<

cout<

getchar();

return 0;

}

头文件里面有两个宏,定义了当前使用的boost程序的版本号

头文件中有三个BOOST_STDLIB,BOOST_PLATFORM和BOOST_COMPILER,分别定义了当前操作系统、编译器和标准库

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace boost;

int main()

{

boost::timer t;

boost::progress_display pd(100);

for (int i = 0; i < 100; ++i) //进度条

{

++pd;

}

boost::gregorian::date dt(2009, 12, 8); //date_time 库

assert(dt.year() == 2009);

assert(dt.day() == 8);

boost::gregorian::date::ymd_type ymd = dt.year_month_day();

std::cout<<"\n"<

<

std::cout << boost::gregorian::to_iso_extended_string(dt) << std::endl; //转换为其他格式

std::cout << boost::gregorian::to_iso_string(dt) << std::endl;

std::cout << boost::gregorian::to_simple_string(dt) << std::endl<

//对数组排序操作

std::vector test_vc(100);

std::vector::iterator beg_it = test_vc.begin();

std::vector::iterator end_it = test_vc.end();

std::srand(std::time(NULL));

std::for_each(beg_it, end_it, [](int& n){n = rand(); });

std::copy(beg_it, end_it, std::ostream_iterator(std::cout, " "));

std::cout << std::endl << std::endl;

std::sort(beg_it, end_it, std::greater());

std::copy(beg_it, end_it, std::ostream_iterator(std::cout, " "));

std::cout << std::endl<

boost::posix_time::ptime pt(boost::gregorian::date(2005, 2, 6));

std::cout << t.elapsed() << "s" << std::endl; //程序运行时间

system("pause");

return 0;

}

尊重原创,参考文章:

Windows下Boost库的安装与使用

boost库在visual studio、DevC++和vscode上的环境配置

相关灵感

mobile365 立方厘米换算立方米

立方厘米换算立方米

📅 07-04 👁️ 1295
beat365体育亚洲入口 女宝宝私处说明书:家有女儿,这几件事你必须知道
beat365体育亚洲入口 TF 变形金刚 大师级 MP-01 擎天柱
beat365体育亚洲入口 倣的意思,倣的解释,倣的拼音,倣的部首,倣的笔顺
365bet吧 如何在 Mac 上修剪视频? 3个视频剪辑器来帮助你
mobile365 雷霆战机集结战神怎么玩?战神系统全解析
mobile365 上海有色网

上海有色网

📅 07-22 👁️ 6797
beat365体育亚洲入口 常用应急救援装备的分类

常用应急救援装备的分类

📅 07-15 👁️ 8368
beat365体育亚洲入口 为何上火时总是感觉在肺部

为何上火时总是感觉在肺部

📅 07-09 👁️ 9399