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,仅仅这两条命令。

也没有设置环境变量,如头文件路径和库函数路径。

但是发现头文件和库文件的默认安装到的位置了,如下图:

(转载)Linux中安装编译Boost库_boost库

(转载)Linux中安装编译Boost库_#include_02

例子:


#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;
}


程序输出:

(转载)Linux中安装编译Boost库_#include_03