1.Boost简介
Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。
既然是库那么使用的时候必然需要指定引用的头文件目录、库文件目录、和具体的库文件。对应到VS项目中:
- 附加包含目录---添加工程的头文件目录
- 附加库目录---添加文件引用的lib静态库路径
- 附加依赖项---添加工程引用的lib文件名
2.Boost库的使用配置
c++ boost大多数组件都是仅包含头文件就能使用的,只有少部分需要单独编译。
具体表现为:包含目录中添加了boost的目录,增加链接目录并没有指定具体的库文件。运行时竟然都不会报找不到对应的库文件错误。
?????大写的问号
原来boost的组件有两种,一种是完全在.hpp中实现的,于是只要包含头文件即可。
但是还有很多组件是需要链接库文件的,这时候boost就使用了一种叫做自动链接的技术。
首先,在boost在编译过程中,会根据编译选项按照一定的规则命名库文件。
然后,利用宏来组装预处理命令,就能链接到指定的库文件了。
举个具体例子libboost_atomic-vc110-mt-s-x32-1_72.lib
vc110:VS2012
mt:多线程
x32:32位编译器编译出来的动态库 1_72表示version
然后在boost/atomic/detail/link.hpp中,可以看到这样两行:
#define BOOST_LIB_NAME boost_atomic #include <boost/config/auto_link.hpp>
在auto_link.hpp中,又可以看到:
#ifdef BOOST_AUTO_LINK_TAGGED #pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT ".lib")
这个预处理命令用来链接指定的库文件,这个展开来就是:
#pragma comment(lib, libboost_atomic-vc110-mt-s-x32-1_72.lib)
其他细节就不说了,总之只要在vs的设置中包含编译好的lib目录,就能自动链接到对应的库文件了。
参考:https://blog.csdn.net/u012043391/article/details/54972127
https://www.zhihu.com/question/275966715