歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Ubuntu下編譯安裝boost庫

Ubuntu下編譯安裝boost庫

日期:2017/2/28 14:45:35   编辑:Linux教程

環境:Ubuntu 12.04 32bit,boost 1.49

前期准備:boost中,用到了別的函數庫,所以為了使用boost中相應的功能,需要先安裝系統中可能缺失的庫 

apt-get install mpi-default-dev  #安裝mpi庫

apt-get install libicu-dev     #支持正則表達式的UNICODE字符集 

apt-get install python-dev     #需要python的話

apt-get install libbz2-dev     #如果編譯出現錯誤:bzlib.h: No such file or directory

上述函數庫裝好之後,就可以編譯boost庫了。解壓boost_1_49_0.tar.bz2,得到/boost_1_49_0,將當前工作目錄切換到此文件夾下。

./bootstrap.sh

生成bjam,上述命令可以帶有各種選項,具體可參考幫助文檔: ./bootstrap.sh --help。其中--prefix參數,可以指定安裝路徑,如果不帶--prefix參數的話(推薦),默認路徑是 /usr/local/include 和 /usr/local/lib,分別存放頭文件和各種庫。執行完成後,會生成bjam,已經存在的腳本將會被自動備份。注意,boost 1.49會在當前目錄下,生成兩個文件bjam和b2,這兩個是一樣的,所以接下來的步驟,可以用這兩個中的任意一個來執行。

using mpi ;  #如果需要MPI功能,需要在 /tools/build/v2/user-config.jam 文件的末尾添加

接下來就是利用生成的bjam腳本編譯源代碼了

./b2 -a -sHAVE_ICU=1  #-a參數,代表重新編譯,-sHAVE_ICU=1代表支持Unicode/ICU

注意,這裡是全部編譯。當然也可以選擇只編譯一部分,選項 --with-<library> 只編譯指定的庫,如輸入--with-regex就只編譯regex庫了。boost1.49 的完全編譯,在筆者Intel® Core™2 Duo CPU T5750 @ 2.00GHz × 2 ,2G DDR2內存的老機子上,使用上述選項,半個小時就差不多了。這個時間是可以承受的。全部編譯安裝,心理上感覺也舒服些。^_^

bjam的一些常用的參數,列表如下:

--build-dir=<builddir> 編譯的臨時文件會放在builddir裡(這樣比較好管理,編譯完就可以把它刪除了) --stagedir=<stagedir> 存放編譯後庫文件的路徑,默認是stage --build-type=complete

編譯所有版本,不然只會編譯一小部分版本,確切地說是相當於:

variant=release, threading=multi;link=shared|static;runtime-link=shared

variant=debug|release 決定編譯什麼版本(Debug or Release?) link=static|shared 決定使用靜態庫還是動態庫 threading=single|multi 決定使用單線程還是多線程庫 runtime-link=static|shared 決定是靜態還是動態鏈接C/C++標准庫 --with-<library> 只編譯指定的庫,如輸入--with-regex就只編譯regex庫了 --show-libraries 顯示需要編譯的庫名稱

編譯完成後,進行安裝,也就是將頭文件和生成的庫,放到指定的路徑(--prefix)下

./b2 install

至此,如果一切順利,就完成安裝了。寫個小程序檢驗下,來自《Boost程序庫完全開發指南——深入C++“准”標准庫(修訂版)》(羅劍鋒著,電子工業出版社2012.5)

Boost程序庫完全開發指南——深入C++“准”標准庫高清PDF版下載:http://www.linuxidc.com/Linux/2013-07/87574.htm

#include "stdcpp.hpp"

#include <boost/timer.hpp>

using namespace boost;

int main()

{

timer t;

cout << "max timespan: " << t.elapsed_max() / 3600 << "h" << endl;

cout << "min timespan: " << t.elapsed_min() << "s" << endl;

cout << "now time elapsed: " << t.elapsed() << "s" << endl;

return EXIT_SUCCESS;

}

程序輸出:

max timespan: 0.596523h

min timespan: 1e-06s

now time elapsed: 0s

Copyright © Linux教程網 All Rights Reserved