前两月听说了boost这一名词,招聘要求会用boost或者stl的也比较多,于是乎花了63大洋(打完折),买了一本《Boost 程序库完全开发指南》,开始研究学习,直到今天才开始安装;
1.。从boost网站www.boost.org下载boost源码,最新版本是1.45,我用的是1.42的,boost_1_42_0.tar.gz;
2.。解压源码文件:tar zxvf boost_1_42_0.tar.gz,得到目录boost_1_42_0;
3.。cd boost_1_42_0/tools/build/v2
vi user-config.jam
将 using gcc : 4.4 : g++-4.4 ; 前边的注释去掉,修改gcc与g++版本号与自己系统的相一致,要不然编译时提示错误,找不到gcc。
4.。进入目录boost_1_42_0/tools/jam,准备编译一个工具bjam,这个工具是boost自己的工具,用来编译boost,
./build_dist.sh
稍等片刻编译完毕之后,会在目录boost_1_42_0/tools/jam/stage/bin.linuxx86生成可执行文件bjam,将该文件复制到boost根目录,
cp bjam /boost_1_42_0 (我的boost_1_42_0文件夹在根目录)
5.。开始编译boost,其实boost的库并不是都必须要编译才能用,只有少数十几个才需要编译,但是我这里都编译了;
在编译之前最好先安装python2.6-dev_2.6.5-1ubuntu6_i386.deb,不然的话编译python时会提示一大堆错误,以至于最后有很多库都没有编译,而且提示failed。。。。。等等,skip。。。。。当然,也可以通过选项-without-python放弃python的编译,这样就不会提示错误。
在编译时关于库regex的错误,如果需要支持unicode的话,必须安装libicu42_4.2.1-3_i386.deb,否则可以不安装,
输入 apt-get install libicu42 系统自动下载并安装。
需要ICU支持的编译命令:
./bjam -sHAVE_ICU=1 --without-mpi --toolset=gcc --includedir=/usr/local/include --libdir=/usr/local/lib/boost install
不需要ICU支持的编译命令:
./bjam --without-mpi --toolset=gcc --includedir=/usr/local/include --libdir=/usr/local/lib/boost install
编译之后头文件安装到了--includedir=/usr/local/include ,lib库文件安装到了--libdir=/usr/local/lib/boost中,可以cd进去查看一番;
我这里没有编译mpi库,编译mpi库的的话需要按装openmpi库,最重要的是试了几个小时最热openmpi编译安装了,但是配置mpi一直失败,最后不得已放弃mpi的编译
编译过程大概要半个小时左右,慢慢等吧。看看股票都行。
6.。配置头文件与库文件的搜索路径:
用简单的方法,将头文件做个符号链接,即:ln -s /usr/local/include/boost /usr/include/boost
库文件在/usr/local/lib目录,编译器能够搜索到,不需要做任何工作,只不过在使用需要编译才能使用的boost库时,必须在命令行加上改库名字,否则提示找不到某个符号的实现之类的错误;
7.。编写测试程序
1)使用不需要编译的库 timer 库
#include <boost/timer.hpp>
#include <iostream>
using namespace boost;
int main()
{
timer t;
std::cout << "boost lib [timer] test code..."<< std::endl;
std::cout << "max timespan:" << t.elapsed_max() / 3600 << "h" << std::endl;
std::cout << "min timespan:" << t.elapsed_min() << "s" << std::endl;
std::cout << "now time elapsed:" << t.elapsed() << "s" << std::endl;
}
g++ -o a.out timer_test.cpp
./a.out
结果如下:
boost lib [timer] test code...
max timespan:0.59652h
min timespan:1e-06s
now time elapsed:0.01s
说明成功使用了boost库函数。
2)使用regex库
#include <boost/regex.hpp>
#include <iostream>
using namespace boost;
int main()
{
std::cout << "boost lib [regex] test code..." << std::endl;
boost::regex reg("//d{3}([a-zA-Z]+).(//d{2}|N/A)//s//1");
}
不加-l参数时编译出错:
g++ -o regex regex_test.cpp
加-l参数时不出错:
g++ -o regex regex_test.cpp -lboost_regex
运行结果:
boost lib [regex] test code...
至此,boost环境就编译测试完毕,以后可以在此环境上学习boost的其它库的用法,进而将他们应用到自己的工作当中,尽量提高工作效率,降低开发成本。哈哈哈哈