實際上我就是用默認的bjam install,偷懶了,,,
linux默認頭文件會放到/usr/local/include下面 lib放到/usr/local/lib下面
1.下載 boost-1_52 http://sourceforge.net/projects/boost/files/boost/1.52.0/2. 將文件解壓在/usr/local/目錄下3. 進入/usr/local/boost-1_52_0/ 目錄, 在terminal中輸入 ./bootstrap.sh
4.進入/usr/local/boost-1_52_0/ 目錄,在terminal中輸入
sudo ./bjam --layout=versioned --build-type=complete --toolset=gcc install
5.添加環境變量(剛改完要重啟或者注銷一下來更新剛修改過的環境變量)
兩種方法:
(1)修改/etc/profie文件 末尾添加
export BOOST_INCLUDE=/usr/local/include/boost-1_52
export BOOST_LIB=/usr/local/lib
(2)在/etc/profile.d/ 中新建一個shell文件boost.sh
#!/bin/sh
export BOOST_INCLUDE=/usr/local/include/boost-1_52
export BOOST_LIB=/usr/local/lib
1.Boost庫的下載地址:http://sourceforge.net/projects/boost/files/boost/1.44.0/ 2.Boost庫的編譯,安裝
下載boost_1_44_0.tar.gz
tar -zxvf boost_1_44_0.tar.gz
然后進入解壓縮后的文件夾編譯boost的編譯器jam
cd boost_1_44_0\tools\jam
./build_dist.sh
編譯完后在這個目錄下有編譯出的bjam文件
boost_1_44_0\tools\jam\stage\bin.linuxx86
把它copy到boost_1_44_0 然后在這個目錄下運行命令編譯:
./bjam "-sTOOLS=gcc" "--includedir=/usr/include" "--libdir=/usr/lib/boost" install
./bjam --toolset=gcc --includedir=/usr/local/include --libdir=/usr/local/lib/boost install
開始編譯,等待編譯完成,需很長時間。
關于bjam的后面的參數的設置:
-sTOOLS=gcc 指定編譯器為GCC
--includedir=/usr/include/ 指定頭文件的安裝目錄,我安裝在/usr/include下。如果安裝成功,將在/usr/include/生成目錄boost_1_33,該目錄下就是boost的頭文件目錄
--libdir=/usr/lib/boost 指定boost的庫文件的存放位置, 生成的 .a .so 文件將放在該目錄下
install 編譯并安裝boost
3.注意事項
安裝完成后,為了每次使用時不用輸入太多的目錄,可以在/etc/profile中加入:
BOOST_INCLUDE=/usr/include/boost
BOOST_LIB=/usr/lib/boost
export BOOST_INCLUDE BOOST_LIB
以后在編譯程序時,只需要用:-I$BOOST_INCLUDE -L$BOOST_LIB 即可,還要使用-l指定了鏈接庫。
也許會出現編譯時或者運行時找不到動態庫(*.so)的錯誤
把/usr/lib/boost追加到動態鏈接庫配置文件/etc/ld.so.conf中,然后直接運行ldconfig,即可!
{僅測試成功一次的方式:./bjam --toolset
lib:/newdisk/hotevent/boost_1_44_0/stage/lib
include:/newdisk/hotevent/boost_1_44_0
ln -s /newdisk/hotevent/boost_1_44_0 /usr/include/boost
并把/newdisk/hotevent/boost_1_44_0/stage/lib加入到/etc/ld.so.conf,用命令ldconfig更新一下。
在編譯程序時直接用g++ re.cpp -lboost_regex -o re即可!}
4.Boost庫的使用舉例
第一個測試文件是lex.cpp:
#include <boost/lexical_cast.hpp>
#include <iostream>
int main()
{
using boost::lexical_cast;
int a = lexical_cast<int>("123");
double b = lexical_cast<double>("123.12");
std::cout<<a<<std::endl;
std::cout<<b<<std::endl;
return 0;
}編譯:g++ lex.cpp -I$BOOST_INCLUDE -o lex
運行:./lex
輸出:
123
123.12
我們的第二個例子是re.cpp:
#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main() {
std::string s = "who,lives:in-a,pineapple under the sea?";
boost::regex re(",|:|-|\\s+");
boost::sregex_token_iterator
p(s.begin( ), s.end( ), re, -1);
boost::sregex_token_iterator end;
while (p != end)
std::cout << *p++ << '\n';
}編譯:g++ re.cpp -I$BOOST_INCLUDE -lboost_regex -o re運行:./re輸出:
who
lives
in
a
pineapple
under
the
sea?
附注:為了讓動態鏈接庫為系統所共享,還需運行動態鏈接庫的管理命令--ldconfig
ldconfig 命令的用途,主要是在默認搜尋目錄(/lib和/usr/lib)以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態 鏈接庫(格式如前介紹,lib*.so*),進而創建出動態裝入程序(ld.so)所需的連接和緩存文件.緩存文件默認為 /etc/ld.so.cache,此文件保存已排好序的動態鏈接庫名字列表.