Data Mining

Linux上安装使用boost入门指导

  1. 获得boost
  2. boost分布
  3. 只需要头文件的库
  4. 使用boost建立一个简单的程序
  5. 准备使用boost二进制文件库
  6. 把你的程序链接到boost库

1.获得boost

下载boost_1_46_1.tar.bz2

解压

2.boost分布

boost_1_46_1.........................boost根目录

  boost/.....................................所有boost头文件

  libs/........................................Tests,.cpps,docs等的库文件

注意:

  (1)boost根目录(通常是/usr/local/boost_1_46_1)想到$BOOST_ROOT变量中

  (2)编译程序时如果用到boost库,需要指定头文件路径-I$BOOST_ROOT

  (3)因为所有头文件都在boost文件夹下,并且头文件都是hpp后缀,所#include形如:

    #include <boost/whaever.hpp>

3.只需要头文件的库

  绝大多数的boost库都是header-noly的:它们完全由包含模板和inline函数的头文件组成,不需要单独编译和二进制库文件,也不需要链接时特别对待。

  只有下面的boost库必需单独built:

  • Boost.Filesystem
  • Boost.GraphParallel
  • Boost.IOStreams
  • Boost.MPI
  • Boost.ProgramOptions
  • Boost.Python (see the Boost.Python build documentation before building and installing it)
  • Boost.Regex
  • Boost.Serialization
  • Boost.Signals
  • Boost.System
  • Boost.Thread
  • Boost.Wave

  下面这些单独built是可选(optional)的: 

  Boost.DateTime  Boost.Graph  Boost.Math  Boost.Random  Boost.Test

4.使用boost建立简单的程序

  下面的程序(example.cc)只用到header-only库。它是从标准输入中读入一串整数,使用Boost.Lambda每个数乘以3后输出。

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

编译:g++  -I$BOOST_ROOT  example.cc  -o  example

运行:echo 1 2 3 | ./example

5.准备使用boost二进制库

  如果你的程序用到需要单独编译的boost库,你需要首先获得这些二进制库文件。

5.1编译安装所有二进制库文件

  cd $BOOST_ROOT

  ./bootstrap.sh  --help

  ./bootstrap.sh  --prefix=/usr/local    ##其实默认情况下prefix的值就是/usr/local

  此时生成了bjam可执行文件,这个东西就是用来编译boost库的。

  ./bjam  install

5.2仅安装指定的二进制库文件

  下面均使用系统默认的编译器,即Linux上的gcc。

  5.2.1安装Boost.build

  Boost.Build是一个用于开发、测试、安装软件的基于文本的系统。Boost.Build的生成安装步骤:

  (1)cd $BOOST_ROOT/tools/build/v2

  (2)./bootstrap.sh

  (3)./bjam  install  --prefix=/usr/local/      ##prefix是Boost.Build安装位置

  (4)把prefix/bin放到PATH中          ##当然/usr/local/bin已经PATH中了

  5.2.2调用bjam时不指定toolset则使用系统默认的编译器。如果你的Linux上装了不同版本的gcc,则使用toolset选项时可以指定版本号:toolset=gcc-4.4

  5.2.3指定build路径,通过--build-dir=/path选项,不指定时默认在当前路径下创建bin.v2文件夹,把生成的文件放在其内。

  5.2.4调用bjam

  cd  $BOOST_ROOT

  bjam  --build-dir=./build-boost  toolset=gcc   stage

  上面的命令将创建static and shared non-debug multi-threaded variants of the libraries.如果要建立所有的variants,请使用"--build-type=complete"选项。

  所有的boost二进制库文件将放在stage/lib/下,如果你要另外指定路径,请使用“--stagedir=directory"选项。

  注意为节省build时间,你可能需要少build一些库文件:

  • 查看库文件名称  --show-libraries
  • 限制build哪些库  --with-libraryname或者--without-libraryname
  • 选择特定的build variant  adding release or debug to the command line

  友情提示:Boost.Build会生成很多报告输出,如果你能保证建立过程不出错误,你可以禁止这些输出以节省时间。方法:在命令后追加”>build.log  2>&1"

6.把你的程序链接到boost库

  下面的程序是从邮件中抽取“主题”内容,它用到了Boost.Regex库,这个库是需要单独编译的。

#include <boost/regex.hpp>
#include <iostream>
#include <string>
 
int main()
{
    std::string line;
    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );
    
    while (std::cin)
    {
        std::getline(std::cin, line);
        boost::smatch matches;
        if (boost::regex_match(line, matches, pat))
            std::cout << matches[2] << std::endl;
    }
}

编译:

方法A:g++  -IBOOSTROOTexample.cc−oexampleBOOSTROOTexample.cc−oexampleBOOST_ROOT/stage/lib/ -lboost_regex.a

方法B:g++  -IBOOSTROOTexample.cc−oexample−LBOOSTROOTexample.cc−oexample−LBOOST_ROOT/stage/lib/ -lboost_regex

当你要使用多个库源于一个路径时使用方法B就省力了(paid off)。注意到方法B中并没有指定.a(静态库)还中.so(动态库),系统将自动地帮你选择使用静态库还是动态库,当然你可以通过选项“-static"显示地指定。

6.1库文件的命名方式

拿libboost_regex-gcc34-mt-d-1_36来说:

lib....................................通用前缀

boost_regex.....................库名

gcc34...............................编译时使用的toolset是gcc-3.4

mt...................................编译时是支持多线程的

d/s/g/y/p..........................ABI tag

1_36................................Tag version

6.2运行我们的程序

  首先新建一个文本文件mail.txt

To: George Shmidlap
From: Rita Marlowe
Subject: Will Success Spoil Rock Hunter?
---
See subject.

如果我们的程序链接到了一个共享动态库,我们需要让系统知道到哪儿去加载它。请看我的~/.bashrc文件:

#boost
export BOOST_ROOT="/usr/local/boost_1_46_1"
export LD_LIBRARY_PATH="/usr/local/boost_1_46_1/stage/lib:$LD_LIBRARY_PATH"

运行程序:./example  <  mail.txt

应该输出

Will Success Spoil Rock Hunter?

http://www.cnblogs.com/zhangchaoyang/articles/2048952.html

Linux上安装使用boost入门指导的更多相关文章

  1. [Zephyr] 1、在linux上安装Zephyr-OS并跑DEMO

    星期五, 14. 九月 2018 02:18上午 - BEAUTIFULZZZZ 0) 前言 Zephyr™项目是一个采用Apache 2.0协议许可,Linux基金会托管的协作项目.为所有资源受限设 ...

  2. Linux 上安装 weblogic12C (静默安装) (一)

    最近负责在linux上安装weblogic,客户说要安装最新的版本,版本号为 12.1.X(12.1.2,12.1.3).开始以为和旧版安装一样,使用控制台的方式,下载bin文件,然后一步步在cons ...

  3. 在Windows和Linux上安装paramiko模块以及easy_install的安装方法

    一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...

  4. 在Linux上安装Oracle RAC 12 c(12.1) 虚拟机,一步一步向导

    Oracle RAC 12 c(12.1)在Linux上安装虚拟机,一步一步向导 今天我们将看到如何安装 12 c版本1 RAC(真正的应用程序集群)数据库2 Linux 64位的虚拟机 使用VMWa ...

  5. WINDOWS和Linux上安装php7 alpha 并安装 yaf

    WINDOWS和Linux上安装php7 alpha 并安装 yaf PHP技术  widuu  2个月前 (06-15)  126浏览  0评论 windows 1.windows上安装 php7 ...

  6. 在Windows和Linux上安装paramiko模块

    一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...

  7. 如何在Linux上安装Storm

    Storm是开源的分布式实时计算系统,能够让数据流处理变得简单.可靠,也因此在大数据领域有广泛的实际 应用.下面介绍一下如何在Linux系统上安装Storm.根据Storm官网介绍,安装Storm软件 ...

  8. linux上安装Drupal

    linux上安装Drupal 前言:国内用drupal的并不太多,网上资料也很少.要注意的是drupal尽量别使用apt来安装,特别是ubuntu平台的drupal做出了一定的更改,会妨碍后期的学习和 ...

  9. 在Linux上安装Hadoop

    先决条件: Hadoop是用JAVA写的,所以首先要安装Java.在Ubuntu上安装JDK见:http://blog.csdn.net/microfhu/article/details/766739 ...

随机推荐

  1. 未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。

    未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个 ...

  2. 【转】大数据以及Hadoop相关概念介绍

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4230220.html 感谢! 一.大数据的基本概念 1.1.什么是大数据 大数据指的就是要处理的数据是TB级别以 ...

  3. 【下载】支持中文的 jspSmartUpload jar 包

    http://www.blogjava.net/hijackwust/archive/2007/08/22/138598.html —————————————————————————————————— ...

  4. [转载]关于AutoCAD.NET的辅助方法

    转载自:http://www.cnblogs.com/milian/p/3315000.html 求中点坐标: /// <summary> /// 中点 /// </summary& ...

  5. ThinkPad X200s 安装 Mac OSX

    ===================先说一下注意事项================== 无论任何安装方法(U盘.光盘)不能进入安装界面,或者鼠标无法移动.那就在变色龙引导界面加入以下代码 cpus ...

  6. UITextFiled,UIButton,UIImageView交互相互之间的事件拦截

    UIButton右上方添加一个笑button如: UIButton *button =[UIButton buttonWithType:UIButtonTypeCustom];    button.f ...

  7. 利用HTML5开发Android(4)---HTML5本地存储之Web Storage

    Web Storage是HTML5引入的一个非常重要的功能,可以在客户端本地存储数据,类似HTML4的cookie,但可实现功能要比cookie强大的多,cookie大小被限制在4KB,Web Sto ...

  8. OC:继承、初始化方法、便利构造器

    A继承 的作用就是为了,节省代码.     继承 :子类会继承父类 里面所有的内容     思想 :凡是继承过来的实例变量和方法 都是自己的(是从父类遗传过来的)     继承的使用场景 : 当我们多 ...

  9. [转]NTLM身份验证

    链接:http://www.360doc.com/content/12/0615/14/10216164_218320534.shtml 在允许的环境下,Kerberos是首选的认证方式.在这之前,W ...

  10. 在js中使用createElement创建HTML对象和元素

    1.创建链接 <script language="javascript"> var o = document.body; //创建链接 function createA ...