虚位以待(AD)
虚位以待(AD)
首页 > 操作系统 > LINUX > Linux下Boost编译安装

Linux下Boost编译安装
类别:LINUX   作者:码皇   来源:……     点击:

Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。

Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。

安装步骤:

    wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gztar zxvf boost_1_64_0.tar.gzcd boost_1_64_0.tar.gz./bootstrap.sh --with-libraries=all --with-toolset=gcc ##--with-libraries指定编译哪些boost库,all的话就是全部编译,只想编译部分库的话就把库的名称写上,之间用 , 号分隔即可,可指定的库下面介绍。--with-toolset指定编译时使用哪种编译器,Linux下使用gcc即可,如果系统中安装了多个版本的gcc,在这里可以指定gcc的版本,比如--with-toolset=gcc-4.4

命令执行完后看到如下所示即为成功:

    Building Boost.Build engine with toolset gcc... tools/build/src/engine/bin.linuxx86_64/b2Detecting Python version... 2.6Detecting Python root... /usrUnicode/ICU support for Boost.Regex?... not found.Generating Boost.Build configuration in project-config.jam...Bootstrapping is done. To build, run: ./b2To adjust configuration, edit '
    project-config.jam'
    .Further information: - Command line help: ./b2 --help - Getting started guide: http://www.boost.org/more/getting_started/unix-variants.html - Boost.Build documentation: http://www.boost.org/build/doc/html/index.html

编译

    ./b2 toolset=gcc

安装boost

    ./b2 install --prefix=/usr ##--prefix=/usr用来指定boost的安装目录,不加此参数的话默认的头文件在/usr/local/include/boost目录下,库文件在/usr/local/lib/目录下。这里把安装目录指定为--prefix=/usr则boost会直接安装到系统头文件目录和库文件目录下,可以省略配置环境变量。

最后,如果安装后想马上使用boost库进行编译,还需要执行一下这个命令:

    ldconfig

可指定的库有:
库名 说明
atomic
chrono
context
coroutine
date_time
exception
filesystem
graph 图组件和算法
graph_parallel
iostreams
locale
log
math
mpi 用模板实现的元编程框架
program_options
python 把C++类和函数映射到Python之中
random
regex 正则表达式库
serialization
signals
system
test
thread 可移植的C++多线程库
timer
wave

Boost使用测试
以boost_thread为例,测试刚安装完的boost库是否能正确使用,测试代码如下:

    #include //包含boost头文件#include #include using namespace std;
    volatile bool isRuning = true;
    void func1(){
    static int cnt1 = 0;
    while(isRuning) {
    cout << "func1:" << cnt1++ << endl;
    sleep(1);
    }
    }
    void func2(){
    static int cnt2 = 0;
    while(isRuning) {
    cout << "tfunc2:" << cnt2++ << endl;
    sleep(2);
    }
    }
    int main(){
    boost::thread thread1(&func1);
    boost::thread thread2(&func2);
    system("read");
    isRuning = false;
    thread2.join();
    thread1.join();
    cout << "exit" << endl;
    return 0;
    }

编译程序:

    g++ main.cpp -g -o main -lboost_thread

如果boost库的安装位置不是在系统目录下,则还需要在编译时加上-I和-L指定boost头文件和库文件的位置

编译成功后运行程序,利用boost实现的多线程任务正确运行:
这里写图片描述vc281tDL+cq+tO3O86O6PC9wPg0KPHA+PGltZyBhbHQ9"这里写图片描述" src="http://www.ailab.com.cn/uploadfile/2017/0623/20170623012422869.png" title="" />

执行:

    LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATHexport LD_LIBRARY_PATH

之后再重新编译运行即可。

相关热词搜索:
上一篇:zabbix安全
下一篇:IPC----共享内存