ubuntu下編譯安裝boost庫 - longcpp - 博客園
ubuntu下編譯安裝boost庫
2012-06-06 15:17
by
longcpp,
259
閱讀,
2
評(píng)論,
收藏 ,
編輯環(huán)境:ubuntu 12.04? 32bit,boost 1.49
前期準(zhǔn)備:boost中,用到了別的函數(shù)庫,所以為了使用boost中相應(yīng)的功能,需要先安裝系統(tǒng)中可能缺失的庫
apt-get install mpi-default-dev #安裝mpi庫
apt-get install libicu-dev #支持正則表達(dá)式的UNICODE字符集
apt-get install python-dev #需要python的話
apt-get install libbz2-dev #如果編譯出現(xiàn)錯(cuò)誤:bzlib.h: No such file or directory上述函數(shù)庫裝好之后,就可以編譯boost庫了。解壓boost_1_49_0.tar.bz2,得到/boost_1_49_0,將當(dāng)前工作目錄切換到此文件夾下。
./bootstrap.sh生成bjam,上述命令可以帶有各種選項(xiàng),具體可參考幫助文檔: ./bootstrap.sh --help。其中--prefix參數(shù),可以指定安裝路徑,如果不帶--prefix參數(shù)的話(推薦),默認(rèn)路徑是 /usr/local/include 和 /usr/local/lib,分別存放頭文件和各種庫。執(zhí)行完成后,會(huì)生成bjam,已經(jīng)存在的腳本將會(huì)被自動(dòng)備份。注意,boost 1.49會(huì)在當(dāng)前目錄下,生成兩個(gè)文件bjam和b2,這兩個(gè)是一樣的,所以接下來的步驟,可以用這兩個(gè)中的任意一個(gè)來執(zhí)行。
usingmpi ; #如果需要MPI功能,需要在 /tools/build/v2/user-config.jam 文件的末尾添加?接下來就是利用生成的bjam腳本編譯源代碼了
./b2 -a -sHAVE_ICU=1 #-a參數(shù),代表重新編譯,-sHAVE_ICU=1代表支持Unicode/ICU注意,這里是全部編譯。當(dāng)然也可以選擇只編譯一部分,選項(xiàng) --with-<library>? 只編譯指定的庫,如輸入--with-regex就只編譯regex庫了。boost1.49 的完全編譯,在筆者Intel? Core?2 Duo CPU T5750 @ 2.00GHz × 2 ,2G DDR2內(nèi)存的老機(jī)子上,使用上述選項(xiàng),半個(gè)小時(shí)就差不多了。這個(gè)時(shí)間是可以承受的。全部編譯安裝,心理上感覺也舒服些。^_^
bjam的一些常用的參數(shù),列表如下:
--build-dir=<builddir> 編譯的臨時(shí)文件會(huì)放在builddir里(這樣比較好管理,編譯完就可以把它刪除了) --stagedir=<stagedir> 存放編譯后庫文件的路徑,默認(rèn)是stage --build-type=complete 編譯所有版本,不然只會(huì)編譯一小部分版本,確切地說是相當(dāng)于:
variant=release, threading=multi;link=shared|static;runtime-link=shared
variant=debug|release 決定編譯什么版本(Debug or Release?) link=static|shared 決定使用靜態(tài)庫還是動(dòng)態(tài)庫 threading=single|multi 決定使用單線程還是多線程庫 runtime-link=static|shared 決定是靜態(tài)還是動(dòng)態(tài)鏈接C/C++標(biāo)準(zhǔn)庫 --with-<library> 只編譯指定的庫,如輸入--with-regex就只編譯regex庫了 --show-libraries 顯示需要編譯的庫名稱 ?編譯完成后,進(jìn)行安裝,也就是將頭文件和生成的庫,放到指定的路徑(--prefix)下
./b2 install?至此,如果一切順利,就完成安裝了。寫個(gè)小程序檢驗(yàn)下,來自《Boost程序庫完全開發(fā)指南——深入C++“準(zhǔn)”標(biāo)準(zhǔn)庫(修訂版)》(羅劍鋒著,電子工業(yè)出版社2012.5)
123456789101112131415#include "stdcpp.hpp"#include <boost/timer.hpp>?usingnamespaceboost;?intmain(){????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;?????returnEXIT_SUCCESS;}?程序輸出:
max timespan: 0.596523hmin timespan: 1e-06snowtimeelapsed: 0s?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

