- 什么是Boost
一个C++开源库,提供了非常多有用的功能。
- 获取Boost
最可靠的方式是去Boost官网下载,因为根据官网介绍一些系统自带的Boost发行包和官方的包在组织结构上会有区别。为了省去不必要的麻烦,保持与官方文档一致,所以采用官网的包是最稳妥的方式。
- Boost文件组织说明
1、Boost根目录: /home/apple/DownLoads/boost_1_65_0;
2、所有需要使用的头文件都位于boost目录或者其子目录下;
3、官方文档:libs/index.html,但是如果要看最新的文档,还是联网看吧。
- 使用Boost
1、对于大部分Boost库来说,只需要包含一个头文件就可以使用了,形式如:#include <boost/asio.hpp>
2、少部分Boost库需要单独编译后才能使用,可以使用boost发行包里的工具进行查看哪些库是需要单独编译的。
- 示例一:只需要头文件的库用法
1、源码
2、编译
其中-I选项通知g++去什么目录下查找include的头文件:boost/lambda/lambda.hpp,如果没有这个选项,则只会去系统默认包含目录下查找,即:/usr/include
- 示例二:需要单独编译的库用法
1>、现在需要使用正则表达式库,即regex,通过boost发行包自带的工具可以得知regex库需要单独编译,如下:
需要关注的是:
(1).--show-libraries 显示所有需要单独编译的库名称;
(2).--with-libraries 配置需要安装的库名称列表,以逗号分隔;
(3).--prefix 生成的库和头文件所在的路径,如配置成/usr,表示生成的库将位于/usr/lib下面,头文件会在/usr/include下面
2>、生成编译regex的配置文件
3>、开始build(注:需要root权限)
4>、生成效果如下:
5>、示例源码
6>、编译
(1)、此处编译没有加-I和-L选项是因为我将regex库和头文件都生成到系统默认包含目录中了,如果生成到其他目录,必须增加这两个选项才能编译成功;
(2)、因为默认包含目录下同时有regex的共享库和静态库,所以g++会自动选择其中一个来链接,可以在生成LINKLIB后通过ldd命令查看。
7>、运行
运行过程中需要查找共享库libboost_regex.so,所以需要提供查找路径,方法如下:
LD_LIBRARY_PATH=/usr/lib:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH
- 其他
1、Q:上次使用--with-libraries选项安装了一个库:regex,这次再用--show-libraries选项查看,竟然只显示regex需要单独编译安装了,怎么解决?
A:的确会出现这种情况,如下:
解决方式: 1>、运行./bootstrap.sh
2>、再次运行./bootstrap.sh --show-libraries,搞定!
原因?不细究了,这种东西不重要,会用就行。
2、使用bjam也可以安装库,具体: ./bjam --help