以前對庫的理解太膚淺(如今也仍很膚淺),致使走了挺多的彎路,現記錄以備後查。python
如今能夠從Boost官網下載到最新的Boost源代碼boost_1_57_0.tar.gz。ios
現將步驟記錄以下:express
$tar -xf boost_1_57_0.tar.gz
$cd boost_1_57_0 $./bootstrap.sh
這時沒有說編譯安裝,是由於在非root帳戶下,編譯安裝過程當中產生的各類庫文件放不進去/usr/local/目錄下。bootstrap
默認的編譯參數保存在project-config.jam下,可用vim本身查看。vim
./b2有諸多的參數能夠選擇,以下(./b2 --help):ide
在這裏,我就選擇比較簡單的參數:測試
$./b2 --without-python stage debug
編譯時間會比較久,編譯成功後會生成boost目錄(頭文件)、stage/lib目錄(動態庫及靜態庫)。spa
將編譯產生的boost目錄拷貝至/usr/include/,將stage/lib/下的全部文件拷貝至/usr/lib64/下,以下:.net
$sudo cp -rf boost /usr/include $sudo cp -rf stage/lib/* /usr/lib64
測試文件test.cpp:debug
1 #include <iostream> 2 #include <string> 3 #include <boost/regex.hpp> 4 5 int main() 6 { 7 std::string str = "192.168.1.1"; 8 9 boost::regex expression("([0-9]+).([0-9]+).([0-9]+)"); 10 boost::smatch what; 11 12 if(boost::regex_search(str, what, expression)) 13 { 14 std::cout << what.size() << std::endl; 15 for(size_t i = 0; i < what.size(); i++) 16 { 17 if(what[i].matched) 18 { 19 std::cout << what[i] << std::endl; 20 } 21 } 22 } 23 24 return 0; 25 }
Makefile:
INC_DIR=-I/usr/include/ LIB_DIR=-L/usr/lib64/ LIB=-lboost_regex CC=g++ -g CFLAGS=-Wall EXE=test all: $(CC) $(CFLAGS) $(EXE).cpp -o $(EXE) $(INC_DIR) $(LIB_DIR) $(LIB) clean: rm -rf *.o $(EXE)
咱們可能並不肯意將Boost庫直接安裝到/usr/目錄下,而是/usr/local/下。
$sudo mkdir /usr/local/boost_1_57_0 $sudo mkdir /usr/local/boost_1_57_0/include $sudo mkdir /usr/local/boost_1_57_0/lib64 $sudo cp -rf boost /usr/local/boost_1_57_0/include $sudo cp -rf stage/lib/* /usr/local/boost_1_57_0/lib64
由於不是默認安裝在/lib或者/usr/lib目錄下,因此須要修改下/etc/ld.so.cache文件,將新的庫目錄/usr/local/boost_1_57_0/lib64添加到/etc/ld.so.cache文件中,步驟以下:
a) 編輯/etc/ld.so.conf文件,加入庫文件所在目錄的路徑
/usr/local/boost_1_57_0/lib64/
b) 運行ldconfig,該命令會重建/etc/ld.so.cache文件
另外,相應的Makefile在編寫的時候須要將頭文件目錄和庫目錄改成:
INC_DIR=-I/usr/local/boost_1_57_0/include/ LIB_DIR=-L/usr/local/boost_1_57_0/lib64/
由於咱們只是簡單地拷貝頭文件和庫文件,所以,咱們直接刪除Boost庫頭文件和庫文件就能夠了,以下:
$sudo rm -rf /usr/include/boost $sudo rm /usr/lib64/*boost*
本人採用的方法相對笨重一點,最好固然就是直接「sudo ./b2 參數」。具體看各人須要吧。