1. 程式人生 > >Windows boost庫安裝 VS2010

Windows boost庫安裝 VS2010

記錄以下安裝的時候出現的坑吧。由於專案需要,目的是為了配置thrift框架,使用RPC服務。但是吧,在Windows上需要配置各種依賴庫,重新編譯。

1.版本問題。最初沒有意識到VS版本跟boost版本的問題,出了很多問題,但是最終問題好像也都不是版本的問題。不過最好還是要版本一致吧。
安裝boost使用的版本:boost_1_53_0
國內比較好下載的連結地址:boost1.53.0

問題:mspdb100.dll無法找到的情況。
方案:這個容易,因為沒有在VS環境下進行安裝,少了很多環境變數的設定。所以在Microsoft Visual Studio 10.0\VC\bin目錄下,執行vcvars32.bat就會配置相關的環境變數,再執行就不會出現這個問題了。

問題:出現了v100之類的問題,可能是因為版本2010是v100。所以需要安裝對版本,這個問題但是沒有記錄清楚。
方案:v100 for visual studio 2010, v110 for visual studio 2012
you also may be working on v100 from visual studio 2012

2、這個問題最頭疼,找了好久的答案,也嘗試過很多種。

問題:在編譯成功之後,會在stage\lib目錄下生成對應的lib檔案。將目錄都新增進VS2010的專案中,這是標頭檔案的問題都已經解決。但是在編譯的時候一直出現LINK : fatal error LNK1104: cannot open file ‘libboost_thread-vc100-mt-s-1_53.lib’的問題,屬於連結的問題吧。檢查一遍配置的目錄一點問題都沒有,重新安裝boost也是一樣的問題。
方案:

方案1 這個說是編譯引數設定的問題,但是試了還是一樣的問題,後來是在這個基礎上進行的下一個步驟,所以也算是安裝步驟吧。
方案2 終於解決了問題。應該是編譯的庫的引數問題。
這裡寫圖片描述

由於不熟悉,還是要慢慢學習。原因如下:

“多執行緒(/MT)”: release版本多執行緒靜態庫
需要使用 libboost_regex-vc90-mt-s-1_44.lib

“多執行緒除錯(/MTd)”:debug版本多執行緒靜態程庫
需要使用 libboost_regex-vc90-mt-sgd-1_44.lib

“多執行緒 DLL(/MD)”: release版本多執行緒動態庫
需要使用
靜態boost 庫連線
libboost_regex-vc90-mt -1_44.lib

動態boost 庫連線, 需要在引入庫前加上“lib”,
執行需要帶上對應的dll
boost_regex-vc90-mt-1_44.lib à在引入庫前加上“lib”
boost_regex-vc90-mt-1_44.dll

“多執行緒除錯 DLL(/MDd)”: debug版本多執行緒動態庫
需要使用
靜態boost 庫連線
libboost_regex-vc90-mt-gd-1_44.lib

動態boost 庫連線, 需要在引入庫前加上“lib”,
執行需要帶上對應的dll
boost_regex-vc90-mt-gd-1_44.lib à在引入庫前加上“lib”
boost_regex-vc90-mt-gd-1_44.dll

附帶安裝方式:
注:在VS命令列下執行
boost安裝編譯:
1、bootsrap.bat
2、bjam stage toolset=msvc-10.0 variant=debug link=static address-model=32 threading=multi runtime-link=static -s install

VS2010專案配置:找到對應的目錄位置。
“VC++目錄->庫目錄”,新增“C:\Boost\lib”,“包含目錄”添加了“C:\Boost\include\boost-1_53”

測試程式碼:

#include "stdafx.h"
#include "boost/thread.hpp"  
#include "iostream"  
using namespace std;  
void threadFunc()  
{  
    cout << "This is a thread function" << endl;  
}  
int main()  
{  
    boost::function<void()> func(threadFunc);  
    boost::thread t(func);  
    t.join();  
    return 0;  
}  

本來編譯一次就需要好久時間,各種方案各種嘗試,花了很多時間,最終是在VS修改了引數,之後成功的。也算是一種學習吧。好久沒寫C++的東西了,積累經驗吧。lib還是要注意好版本問題。