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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章