Linux中安装编译Boost库

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

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

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

Linux中安装编译Boost库_第1张图片

Linux中安装编译Boost库_第2张图片

例子:

#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库_第3张图片

你可能感兴趣的:(linux)