(转载)http://kongxue448.blog.163.com/blog/static/1680531842011215113615215/
Linux中安装编译Boost库
介绍
Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。 Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文 件系统库等)需要链接库。但Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。
编译、安装
我的实现步骤如下:
1、官网下载boost_1_46_0.tar.gz,按照默认的情况,把它解包到 /usr/local/ 里面。
下载地址:http://sourceforge.net/projects/boost/files/boost/
2、boost 库的安装应该分为两部分:第一部分是安装无需编译(Head Only)的boost库,第二部分是安装需要单独编译(Separately-Compiled)的boost库。
3、Head Only的编译:Boost的User Guide中说,Head Only的编译是无需做任何操作的。运行它提供的例子,是可以显示的。
#include <boost/lambda/lambda.hpp> #include <iostream> #include <iterator> #include <algorithm> int main() { using namespace boost::lambda; typedef std::istream_iterator<int> in; std::for_each( in(std::cin), in(), std::cout << (_1 * 3) << " " ); return 0; }
将其保存为:example.cpp
编译:[root@localhost boost_1_46_0]#c++ -I /usr/local/boost_1_46_0 example.cpp -o example
运行:[root@localhost boost_1_46_0]#echo 1 2 3 | ./example
显示结果; 3 6 9
4、Separately-Compiled的编译,需要用到bjam(boost jam),这是专门为boost开发的编译工具。
进到/usr/local/boost_1_46_0文件夹
[root@localhost boost_1_46_0]#./bootstrap.sh
[root@localhost boost_1_46_0]#./bjam install
到这里就算编译完成了,在/usr/local/的include和lib中生成了boost库文件和头文件。其中/usr/local/是boost的默认安装路径,如果需要指明include和lib的安装位置,可以通过一下命令实现。
[root@localhost boost_1_46_0]#./bjam -a "-sTOOLS=gcc" "--includedir=/usr/include" "--libdir=/usr/lib/boost" "--build-type=complete" threading=multi "--layout=tagged" install
总结
Boost编译用到了专门的编译工具bjam,而不是平时常用的make。网上提供了很多种方式获取bjam,有人总结了三种,因为没有尝试过其他的方式,就不一一列出。boost_1_46_0版本不需要单独再获取bjam,只需要运行 [root@localhost boost_1_46_0]#./bootstrap.sh 即可自动生成bjam。
详细的内容可以参阅:boost_1_46_0/more/getting_started/index
笔者很简单的安装了,boost_1_53_0.tar.bz2这个版本。
执行了./bootstrap.sh和./bjam install,仅仅这两条命令。
也没有设置环境变量,如头文件路径和库函数路径。
但是发现头文件和库文件的默认安装到的位置了,如下图:
例子:
#include <iostream> #include <boost/shared_ptr.hpp> // shared_ptr #include <boost/array.hpp> // array #include <boost/tokenizer.hpp> // tokenizer #include <boost/format.hpp> // format #include <boost/date_time/gregorian/gregorian.hpp> // date_time #include <memory> // auto_ptr #include <string> #include <vector> #include <list> #include <deque> #include <algorithm> using namespace std; using namespace boost; using namespace boost::gregorian; // 需要使用这个 template<typename T> void printElement(T element) { cout << element << " "; } int main() { date d1; date d2(2012, 9, 11); cout << d1 << endl; cout << d2 << endl; assert(d2.year() == 2012); assert(d2.month() == 9); assert(d2.day() == 11); cout << day_clock::local_day() << endl; cout << day_clock::universal_day() << endl; return 0; }
程序输出: