boost之简介、编译、安装和使用

Boost库对于开发者来说,就是一个武器库,从手枪到原子弹都能找到,涉及到开发的方方面面。它复杂它功能强,所以需要一些学习成本,但学成了,我们就能更加优雅、更加高效、更加规范的开发C++程序。
具体来说Boost库包含了:字符串及文本处理、容器、迭代器、算法、函数对象和高阶编程、泛型编程、模板元编程、预处理元编程、并发编程、数学相关、纠错和测试、数据结构、输入/输出、跨语言支持、内存相关、语法分析、杂项等方面的内容。

本文主要讲解怎么编译安装Boost和简单的示例程序。后面的文章再深入介绍Boost各模块具体的使用方法。
下载
我们从Boost的官方网站下载源代码包,由于Boost库比较重,它的安装包也比较大,我下载的boost_1_72_0.tar.gz足有120M。

编译
wget https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.gz

tar -zxvf boost_1_72_0.tar.gz

cd boost_1_72_0

./bootstrap.sh --with-libraries=all --with-toolset=gcc
执行上述命令后,我们看到如下信息,表明初步构建成功:

下一步开始编译,执行如下命令:
./b2 toolset=gcc

编译成功之后,我们将其安装到一个指定的目录。执行如下命令:
./b2 install --prefix=/home/motadou/objs/boost/ins

安装成功之后,我们会在/home/motadou/objs/boost/ins目录下看到这么两个文件夹:
其中include目录包含了各种模块的头文件,而lib目录包含了模块的静态库和动态库。
示例程序
// 将该程序保存为:boost.cpp
#include <boost/thread/thread.hpp>
#include <iostream>
#include <cstdlib>

void func1()
{
    static int cnt1 = 0;
    for ( ; true; )
    {
        std::cout << "func1:" << cnt1++ << std::endl;
        ::sleep(1);
    }
}

void func2()
{
    static int cnt2 = 0;
    for ( ; true; )
    {
        std::cout << "func2:" << cnt2++ << std::endl;
        ::sleep(2);
    }
}

int main(int argc, char ** argv)
{
    boost::thread thread1(&func1);
    boost::thread thread2(&func2);

    thread1.join();
    thread2.join();

    return 0;
}

采用Boost静态库的编译方式。
使用如下命令编译上述源代码文件:
g++ -o test boost.cpp -I/home/motadou/objs/boost/ins/include /home/motadou/objs/boost/ins/lib/libboost_thread.a -lpthread


采用Boost动态库的编译方式。
第一步,将Boost动态库目录加入到动态库搜索路径中。使用如下命令:
sudo vi /etc/ld.so.conf
在该文件末尾加入/home/motadou/objs/boost/ins/lib/。
修改完毕的文件如下示例:

第二步,使用ldconfig命令配置动态链接器在运行时的绑定。使用如下命令:
sudo ldconfig

第三步,使用如下命令编译上述源代码文件:
g++ -o test boost.cpp -I/home/motadou/objs/boost/ins/include -L/home/motadou/objs/boost/ins/lib -lboost_thread -lpthread


使用上述两种方式都能正确编译出可执行程序。我们运行可执行程序,程序运行结果如下:
posted @ 2013-01-06 22:00  酱油和醋  阅读(997)  评论(0编辑  收藏  举报