在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
本文所遇到的問題就是在第十二章併發編程中所碰到的。