1. 程式人生 > >C++ Boost在Windows和Linux下的編譯安裝

C++ Boost在Windows和Linux下的編譯安裝

C++作為歷史上最成功的語言之一,除了它具有面向物件的性質之外,還有一個非常重要的創新,那就是泛型程式設計。泛型的思想其實是為所有問題提供一個解決方案的模版,程式設計師只需把每次的具體問題放到模版裡面,那麼就可以獲得該問題的解決方案,利用模版做到具體問題具體分析。C++ STL毫無疑問是泛型思想的一個成功案例。在STL中,我們看到各種封裝好的資料結構和演算法,而不需要程式設計師再重複製造輪子(何況自己造的輪子還不一定可靠)。與STL類似,Boost也是基於泛型思想實現的C++庫,裡面涉及了併發、網路通訊、分散式程式設計、記憶體託管、系統管理等許多方面。今天首先分享Boost庫在Windows和Linux下編譯安裝的過程,最後會用一些簡單的例子來驗證我們安裝的正確性。

1.Boost在Win7+Visual Studio2012的編譯安裝

Step1:從官方網站(http://www.boost.org/)上下載某一版本的Boost,比如我下載的Boost1.55的版本(http://sourceforge.net/projects/boost/files/boost/1.55.0/),zip壓縮包。

Step2:將下載好的boost_1_55_0.zip解壓到某一路徑下(比如:E:\boost_1_55_0)。

Step3:開啟CMD視窗,cd到Step2中boost解壓的目錄下。執行bootstrap.bat批處理檔案。

Step4:完成Step3後,當前目錄下會生成一個bjam.exe檔案和b2.exe檔案。直接執行其中任意一個exe檔案(我執行的是bjam.exe),會進行大約15分鐘的庫的編譯(生成動態連結庫和靜態連結庫)。

注意:在編譯前,需要安裝某一個版本的Visual Studio。我安裝的是Visual Studio 2012。不同版本的VS最後生成的Boost動/靜連結庫不通用

Step5:庫生成完後。Boost的編譯就告一段落。下面我們要做的是在Visual Studio中進行配置

Step6:開啟VS IDE。新建一個工程(比如叫Boost)。右擊該專案-->屬性-->設定專案的屬性如下兩張圖(用於庫的連線和標頭檔案路徑的指定):


圖1(標頭檔案路徑指定,不指定的話,include<boost/timer.hpp>等,則會提示找不到標頭檔案):

圖2(庫路徑的指定):


到目前為止,Windows上的Boost安裝和VS的設定就基本結束了。下面我們通過一個簡單的例子來驗證我們的安裝是否正確。我們在剛才建立的Boost工程中新建一個lexical.cpp的檔案,程式碼如下:

#include <boost/lexical_cast.hpp>
#include <iostream>

using namespace std;
using namespace boost;

int main(){
	int a = lexical_cast<int>("123");
	cout<<a<<endl;<span style="white-space:pre">				</span>//123
	return 0;
}

 
 

這段程式用到了Boost庫中型別轉換的函式lexical_cast< ?>。最後我們編譯執行得到的結果是:123。表示Boost配置正確。


2.Boost在Linux系統上的編譯安裝

Step1,Step2:與在Windows上安裝Boost的前兩個步驟一致。將下載好的壓縮包解壓到某一個路徑下面。

Step3:cd到解壓縮的安裝目錄下面,執行命令sudo ./bootstrap.sh --prefix=/usr/local。其實--prefix後面的引數的作用是決定放置動態和靜態連結庫的路徑。這個路徑可以根據自己的實際情況決定。

Step4:執行命令: sudo ./b2 instal。該命令的作用是開始編譯Boost庫,並且生成庫檔案。

Step5:大概等待15分鐘左右,編譯結束。庫的生成路徑:/usr/local/lib,標頭檔案的路徑:/usr/local/include/boost。

Step6:新增lib庫自動搜尋路徑到/etc/ld.so.conf,然後ldconfig使設定生效。具體操作為:執行命令:sudo vim /etc/ld.so.conf,將"include /usr/local/lib"這句話新增進去,並儲存退出vim編輯器。再執行ldconfig命令使之生效。

Step7:到目前為止,Boost庫在Linux上的編譯安裝可以算告一段落。下面我們編譯一下那個lexical.cc檔案,並執行:

編譯命令:g++ -o lexcial lexcial.cc

執行:./lexical

結果:123

到此為止,Boost庫在Windows和Linux上的部署和測試都已經通過了。當然,有一些Boost的類庫(例如:Boost::asio)必須依賴已經編譯生成的動/靜態庫檔案。則在編譯的時候需要加上一點引數才能通過編譯(這裡指的是用g++命令編譯的時候)。具體的方法我會在接下來的文章中做詳細的闡述。有需要的朋友可以看一下,作為參考。

Boost作為C++ STL的強有力的補充一直是C++程式設計師的利器,如果Boost的中的內容都可以正式成為C++的標準,那麼C++的市場份額也許會再次提升(當然,庫多了,開源專案也會多起來)。現在大量應用的Java語言在很大程度上就是因為其強大的庫和GC機制,這些C++的Boost和智慧指標也許可以與之相媲美。瞭解、用好Boost無疑會為C++程式設計師開啟另一扇大門。該篇文章參考了一些書籍和部落格,這裡我把清單列出來,有興趣的朋友可以去看一下。


參考文獻:

1.《Boost程式庫完全開發指南:深入C++“準”標準庫》,作者:羅劍鋒

2.Linux下動態連結庫的路徑配置:http://blog.163.com/wang_yonglin/blog/static/59342936201511122713521/

3.Linux下Boost的安裝:http://www.cnblogs.com/edgarli/archive/2012/11/18/boost.html

4.Windows下Boost的安裝:http://jingyan.baidu.com/article/11c17a2c765763f446e39dc1.html