`
mylove2060
  • 浏览: 335875 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Linux上安装使用boost入门指导

 
阅读更多

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

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++  -I$BOOST_ROOT  example.cc -o example  $BOOST_ROOT/stage/lib/ -lboost_regex.a

方法B:g++  -I$BOOST_ROOT  example.cc -o example  -L$BOOST_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

应该输出

分享到:
评论

相关推荐

    Linux socket 编程入门

    Linux Socket编程是网络编程的重要组成部分,它允许程序员创建和使用网络连接,特别是在TCP/IP协议栈上构建应用程序。本文将深入探讨TCP服务器端的Socket编程,为初学者提供基础的指导。 首先,理解Socket编程的...

    LIBKML入门及示例代码

    ### LIBKML 入门与示例代码详解 #### 一、LIBKML 简介 LIBKML 是一个用 C++ 编写的库,主要用于处理 KML(Keyhole Markup Language)数据格式。该库支持 Linux、Mac OS X 和 Windows 平台,并且提供了丰富的功能来...

    CodeBlocks 使用教程(中文版)

    综上所述,Code::Blocks 是一款功能强大的集成开发环境,不仅适合初学者入门学习,也能满足专业开发者的需求。通过详细的安装、配置指南以及编程实践指导,用户可以轻松地利用该工具进行高效的 C/C++ 程序开发与调试...

    CodeBlocks中文教程

    - **多平台安装指导**:提供Linux、macOS下安装Code::Blocks的步骤说明。 - **搭配高版本gcc编译器**:介绍如何配置Code::Blocks使用更高级别的gcc编译器版本,以获得更好的编译支持。 - **安装配置boost库**:讲解...

    CMake教程及实战

    - **跨平台兼容性**:如何确保你的CMake项目在Windows、Linux和macOS上都能正确构建。 - **第三方库的管理**:如何使用CMake查找和链接外部库,如Boost或OpenGL。 - **测试集成**:如何利用CTest模块编写和运行单元...

    gnuradio教程

    2. **连接块**:拖动块到画布上,并使用鼠标左键拖拽线连接输入和输出端口,形成数据流。 3. **配置块**:双击块打开配置窗口,设置参数如频率、带宽等。 4. **运行 Flow Graph**:点击顶部的运行按钮,Gnuradio 将...

    MKL库GUIDE

    手册中新增了诸如“Getting Started”、 “LINPACK and MP LINPACK Benchmarks”章节以及“Support for Third-Party and Removed Interfaces”附录,为用户提供了更多入门指导和兼容性信息。文档结构的优化和示例...

    mastering cmake.pdf

    这使得开发者能够在Windows、Linux、macOS等不同平台上无缝地构建和测试项目。CMake的工作流程通常包括配置、生成和构建三个步骤: 1. 配置:使用cmake命令行工具或CMake GUI,用户可以指定源代码目录和生成的目标...

    testbed-demo:GreenEyes欧洲项目-试验台应用

    本文档将指导您逐步设置和使用所提供的软件。 本手册已在Ubuntu 14.04LTS 64位上进行了测试。 先决条件 装有Linux的PC GNU g ++编译器 适用于Armhf架构的GNU g ++交叉编译器(arm-linux-gnueabihf-g ++) OpenCV ...

    cmake_tutorial.zip

    3. **跨平台构建**:同一`CMakeLists.txt`文件可以在不同操作系统(如Windows、Linux、macOS)上构建项目。 4. **使用第三方库**:如何找到并链接外部库,如Boost、Qt等。 **六、进阶特性** CMake支持更多高级功能...

    绝对经典 C++初学者必看的50个建议

    这样可以使你的程序在 Windows、Linux、macOS 等不同平台上都能正常运行。 #### 49. 学会使用调试技巧 - **重要性**:有效的调试技巧可以快速定位问题。 - **建议**:学会使用断点、日志输出等方法来调试代码。...

Global site tag (gtag.js) - Google Analytics