在Boost库使用过程中,一般仅仅需要配置好头文件路径、库文件路径即编程。在实际的编程中,对于常规的Boost知识(时间、格式化、字符串处理)使用一般无大碍,只是要注意一下命名空间的导入即可。但是对于并发编程而言,则不会这么简单。这一般要牵涉到项目属性设置、项目宏定义、动态库添加等等。
下面以最简单的控制台项目为例,来简要讲解一下。
一、建立控制台项目。
建立控制台项目,在项目内部添加.cpp文件,并在文件内添加以下代码:
#include <boost/thread/thread.hpp>
using namespace boost;
int main()
{
mutex mu;
mutex::scoped_lock lock(mu);
cout << "some operations" << endl;
return 0;
}
二、编译项目
编译项目,将会出现以下链接错误:
fatal error C1189: #error : "Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd"
解决方法:找到“项目属性---->配置属性---->C/C++---->代码生成---->运行时库”,将原有默认的“单线程调试(/MLd)”修改为“多线程 DLL (/MD)”。
再度编译,将会出现以下链接错误:
fatal error LNK1104: 无法打开文件“libboost_thread-vc71-mt-gd-1_36.lib”
解决方法:找到“项目属性---->配置属性---->C/C++---->预处理器---->预处理器定义”,在其中填上BOOST_ALL_DYN_LINK宏定义即可。
再度编译,正确。
三、补充知识(/MD、MDd 、/MT、MTd)
后面的那个'd'是代表DEBUG版本,没有'd'的就是RELEASE版本了。
/MT是 "multithread, static version ” 意思是多线程静态的版本,定义了它后,编译器把LIBCMT.lib 安置到OBJ文件中,让链接器使用LIBCMT.lib 处理外部符号。
/MD是 "multithread- and DLL-specific version” ,意思是多线程DLL版本,定义了它后,编译器把 MSVCRT.lib 安置到OBJ文件中,它连接到DLL的方式是静态链接,实际上工作的库是MSVCR80.DLL。
四、Boost学习教程
个人建议采用《Boost程序库完全开发指南》一书,可以从本人CSDN资源上进行下载,下载地址为:
http://download.csdn.net/detail/wghhdzwzqbx02/4253537
本文所遇到的问题就是在第十二章并发编程中所碰到的。