威尼斯人线上娱乐

Ubuntu下编写翻译安装boost库,Linux上安装使用boost入门引导

2 4月 , 2019  

ubuntu下boost编译安装

boost

安装

环境:Ubuntu 12.04 32bit,boost 1.49

环境:Ubuntu 12.04
32bit,boost 1.49

 

1.依靠安装

  1. apt-get
    install mpi-default-dev libicu-dev python-dev python3-dev libbz2-dev zlib1g-dev 


最初准备:boost中,用到了别的函数库,所以为了选择boost中相应的效果,供给先安装系统中或然缺点和失误的库 

中期准备:boost中,用到了别的函数库,所以为了利用boost中相应的机能,供给先安装系统中也许缺点和失误的库 

Linux上安装使用boost入门辅导

2.访问boost官网下载boost最新版本

apt-get install mpi-default-dev  #安装mpi库

Ubuntu下编写翻译安装boost库,Linux上安装使用boost入门引导。apt-get install mpi-default-dev  #安装mpi库

获得boost

3.解压下载文件,例如下载文件在~/Downloads下

  1. cd ~/Downloads 


  2. tar –bzip2 -xvf boost_1_58_0.tar.bz2 


apt-get install libicu-dev     #帮助正则表明式的UNICODE字符集 

apt-get install libicu-dev     #援救正则表明式的UNICODE字符集 

boost分布

肆.预备安装

  1. cd
    boost_1_58 


  2. ./bootstrap.sh 


扭转文书b贰和bjam总结md⑤sum发现相互一致
生成bjam,上述命令能够蕴含各类选项,具体可参照帮助文书档案: ./bootstrap.sh
–help。当中–prefix参数,能够指定安装路径,如若不带–prefix参数的话(推荐),默许路径是
/usr/local/include 和
/usr/local/lib,分别存放头文件和种种库。执行到位后,会生成bjam,已经存在的台本将会被电动备份。注意,boost
一.4玖会在当前目录下,生成三个文本bjam和b二,那五个是平等的,

apt-get install python-dev     #需要python的话

apt-get install python-dev     #需要python的话

只供给头文件的库

伍.编写翻译并安装boost

编写翻译完毕后,进行设置,也正是将头文件和转移的库,放到钦定的门道(–prefix)下

  1. ./b2  //编译boost 


  2. sudo ./b二 install
    //将生成的库安装到/usr/local/lib目录上面,暗中同意的头文件在/usr/local/include/boost目录上面。 


apt-get install libbz2-dev     #只要编写翻译出现谬误:bzlib.h: No such
file or directory

apt-get install libbz2-dev     #假设编写翻译出现谬误:bzlib.h: No such
file or directory

采纳boost建立1个大概的顺序

6.卸载

将/usr/local/lib和/usr/local/include/boost四个目录下的文本直接删除就能够。

上述函数库装好之后,就足以编写翻译boost库了。解压boost_1_49_0.tar.bz2,得到/boost_1_49_0,将当前工作目录切换来此文件夹下。

上述函数库装好之后,就可以编写翻译boost库了。解压boost_1_49_0.tar.bz2,得到/boost_1_49_0,将当前工作目录切换成此文件夹下。

预备利用boost2进制文件库

柒.测试安装是还是不是科学

新建cpp文件

  1. vim boot.cpp 


  2. #include
    <string> 


  3. #include
    <iostream> 


  4. #include
    <boost/version.hpp> 


  5. #include
    <boost/timer.hpp> 


  6. using namespace std; 


  7. int main() 



  8. boost::timer t; 


  9. cout
    << “max
    timespan: ” << t.elapsed_max() / 3600 <<
    “h” <<
    endl; 


  10. cout
    << “min
    timespan: ” << t.elapsed_min() << “s” <<
    endl; 


  11. cout
    << “now time
    elapsed: ” << t.elapsed() << “s” <<
    endl; 


  12. cout
    << “boost
    version” << BOOST_VERSION <<endl; 


  13. cout
    << “boost lib
    version” << BOOST_LIB_VERSION <<endl; 


  14. return
    0; 



编译

  1. g++ boot.cpp -o boot 


  2. ./boot 


事业有成编写翻译之后会议及展览示结果,最终两行打印boost版本

  1. max
    timespan: 2.56205e+09h 


  2. min
    timespan: 1e-06s 


  3. now time
    elapsed: 0.000121s 


  4. boost version106300 


  5. boost lib version1_63 


./bootstrap.sh

./bootstrap.sh

把您的程序链接到boost库

生成bjam,上述命令能够涵盖各个选项,具体可参看帮忙文书档案: ./bootstrap.sh
–help。当中–prefix参数,能够指虞升卿装路径,若是不带–prefix参数的话(推荐),暗中认可路径是
/usr/local/include 和
/usr/local/lib,分别存放头文件和各个库。执行到位后,会生成bjam,已经存在的台本将会被电动备份。注意,boost
一.4玖会在当前目录下,生成七个公文bjam和b贰,那多个是一样的,所以接下去的手续,能够用那多个中的任意3个来实施。

生成bjam,上述命令能够包涵各类选项,具体可参照协理文书档案: ./bootstrap.sh
–help。在那之中–prefix参数,能够指虞升卿装路径,假使不带–prefix参数的话(推荐),默许路径是
/usr/local/include 和
/usr/local/lib,分别存放头文件和各个库。执行到位后,会生成bjam,已经存在的台本将会被电动备份。注意,boost
一.4玖会在当前目录下,生成三个文本bjam和b二,那八个是平等的,所以接下去的步骤,可以用那两在那之中的任意一个来推行。

1.获得boost

using mpi ;  #假使急需MPI功效,须求在 /tools/build/v2/user-config.jam
文书的末梢添加

using mpi ;  #1经须求MPI成效,须要在 /tools/build/v2/user-config.jam
文书的最后添加

下载boost_1_46_1.tar.bz2

接下去就是利用生成的bjam脚本编写翻译源代码了

接下去正是采纳生成的bjam脚本编写翻译源代码了

解压

./b2 -a
-sHAVE_ICU=1  #-a参数,代表重新编写翻译,-sHAVE_ICU=一代表扶助Unicode/ICU

./b2 -a
-sHAVE_ICU=1  #-a参数,代表重新编译,-sHAVE_ICU=壹代表辅助Unicode/ICU

2.boost分布

只顾,那里是成套编写翻译。当然也可以挑选只编写翻译1部分,选项
–with-<library>
只编写翻译钦命的库,如输入–with-regex就只编写翻译regex库了。boost1.49的一心编写翻译,在作者速龙® Core™二 Duo CPU T5750 @ 2.00GHz × 2 ,二G
DDXC60二内部存款和储蓄器的老机子上,使用上述选项,半个钟头就大概了。这几个时刻是还行的。全部编写翻译安装,心境上觉得也舒畅(Jennifer)些。^_^

专注,那里是成套编写翻译。当然也能够挑选只编写翻译一部分,选项
–with-<library>
只编译钦定的库,如输入–with-regex就只编写翻译regex库了。boost一.4九的通通编写翻译,在小编速龙® Core™贰 Duo CPU T5750 @ 二.00GHz × 贰 ,2G
DD途乐2内部存款和储蓄器的老机子上,使用上述选项,半个钟头就基本上了。那几个时间是还可以的。全体编写翻译安装,心绪上觉得也痛快淋漓些。^_^

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

bjam的有个别常用的参数,列表如下:

bjam的局地常用的参数,列表如下:

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

–build-dir=<builddir> 编译的临时文件会放在builddir里(这样比较好管理,编译完就可以把它删除了)
–stagedir=<stagedir> 存放编译后库文件的路径,默认是stage
–build-type=complete

编译所有版本,不然只会编译一小部分版本,确切地说是相当于:

variant=release, threading=multi;link=shared|static;runtime-link=shared

variant=debug|release 决定编译什么版本(Debug or Release?)
link=static|shared 决定使用静态库还是动态库
threading=single|multi 决定使用单线程还是多线程库
runtime-link=static|shared 决定是静态还是动态链接C/C++标准库
–with-<library> 只编译指定的库,如输入–with-regex就只编译regex库了
–show-libraries 显示需要编译的库名称
–build-dir=<builddir> 编译的临时文件会放在builddir里(这样比较好管理,编译完就可以把它删除了)
–stagedir=<stagedir> 存放编译后库文件的路径,默认是stage
–build-type=complete

编译所有版本,不然只会编译一小部分版本,确切地说是相当于:

variant=release, threading=multi;link=shared|static;runtime-link=shared

variant=debug|release 决定编译什么版本(Debug or Release?)
link=static|shared 决定使用静态库还是动态库
threading=single|multi 决定使用单线程还是多线程库
runtime-link=static|shared 决定是静态还是动态链接C/C++标准库
–with-<library> 只编译指定的库,如输入–with-regex就只编译regex库了
–show-libraries 显示需要编译的库名称

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

编译完结后,实行设置,也便是将头文件和扭转的库,放到钦赐的门径(–prefix)下

编写翻译完毕后,实行设置,也正是将头文件和浮动的库,放到钦赐的路子(–prefix)下

注意:

./b2 install

./b2 install

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

从那之后,要是一切顺遂,就完事安装了。写个小程序检查评定下,来自《Boost程序库完全开发指南——深切C++“准”标准库(修订版)》(罗剑锋著,电子工业出版社二〇一二.伍)

到现在,假如壹切顺遂,就成功安装了。写个小程序检查评定下,来自《Boost程序库完全开发指南——深刻C++“准”标准库(修订版)》(罗剑锋著,电子工业出版社二零一一.伍)

  (二)编写翻译程序时假诺用到boost库,供给钦点头文件路径-I$BOOST_ROOT

Boost程序库完全开发指南——长远C++“准”标准库高清PDF版下载: 

Boost程序库完全开发指南——深切C++“准”标准库高清PDF版下载:http://www.linuxidc.com/Linux/2013-07/87574.htm 

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

#include “stdcpp.hpp”

#include “stdcpp.hpp”

    #include <boost/whaever.hpp>

#include <boost/timer.hpp>

#include <boost/timer.hpp>

三.只必要头文件的库

 

 

威尼斯人线上娱乐,  绝大多数的boost库都是header-noly的:它们统统由包罗模板和inline函数的头文件组成,不需求单独编译和二进制库文件,也不要求链接时特意对待。

using namespace boost;

using namespace boost;

  唯有上边包车型地铁boost库必需单独built:

 

 

Boost.Filesystem

int main()

int main()

Boost.GraphParallel

{

{

Boost.IOStreams

    timer t;

    timer t;

Boost.MPI

    cout << “max timespan: ” << t.elapsed_max() / 3600
<< “h” << endl;

    cout << “max timespan: ” << t.elapsed_max() / 3600
<< “h” << endl;

Boost.ProgramOptions

    cout << “min timespan: ” << t.elapsed_min() <<
“s” << endl;

    cout << “min timespan: ” << t.elapsed_min() <<
“s” << endl;

Boost.Python (see the Boost.Python build documentation before building
and installing it)

 

 

Boost.Regex

    cout << “now time elapsed: ” << t.elapsed() << “s”
<< endl;

    cout << “now time elapsed: ” << t.elapsed() << “s”
<< endl;

Boost.Serialization

 

 

Boost.Signals

    return EXIT_SUCCESS;

    return EXIT_SUCCESS;

Boost.System

}

}

Boost.Thread

次第输出:

程序输出:

Boost.Wave

max timespan: 0.596523h

max timespan: 0.596523h

  上面那一个单独built是可选(optional)的: 

min timespan: 1e-06s

min timespan: 1e-06s

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

now time elapsed: 0s

now time elapsed: 0s

四.使用boost建立不难的顺序

Ubuntu编译安装boost并在eclipse C/C++中利用

连锁阅读:

  下边包车型客车先后(example.cc)只用到header-only库。它是从标准输入中读入一串整数,使用Boost.拉姆da每一种数乘以3后输出。

———————————–分割线———————————–

Ubuntu编写翻译安装boost并在eclipse C/C++中选用
http://www.linuxidc.com/Linux/2011-04/34790.htm

view sourceprint?

本人也在ubuntu下装了boost,但是境遇了部分题材:
www.bkjia.com @www.bkjia.com:~/Code$ g++ -lboost_filesystem
-lboost_system main.cpp
/tmp/cclYtfBf.o: In function
`__static_initialization_and_destruction_0(int, int)’:
main.cpp:(.text+0x49): undefined reference to
`boost::system::generic_category()’
main.cpp:(.text+0x53): undefined reference to
`boost::system::generic_category()’
main.cpp:(.text+0x5d): undefined reference to
`boost::system::system_category()’
collect2: ld returned 1 exit status

———————————–分割线———————————–

#include <boost/lambda/lambda.hpp>

也正是说加了#include<boost/filesystem.hpp>那句之后随即出错,别的都没难点。不知到你有未有相逢那几个标题呢?

本人也在ubuntu下装了boost,不过境遇了部分标题:
www.linuxidc.com @www.linuxidc.com:~/Code$ g++ -lboost_filesystem
-lboost_system main.cpp
/tmp/cclYtfBf.o: In function
`__static_initialization_and_destruction_0(int, int)’:
main.cpp:(.text+0x49): undefined reference to
`boost::system::generic_category()’
main.cpp:(.text+0x53): undefined reference to
`boost::system::generic_category()’
main.cpp:(.text+0x5d): undefined reference to
`boost::system::system_category()’
collect2: ld returned 1 exit status

#include <iostream>

答:

也便是说加了#include<boost/filesystem.hpp>那句之后马上出错,其余都没难点。不知到你有未有碰着这几个标题吧?

#include <iterator>

“boost/filesystem.hpp” 这些文件重视于boost_system,编译的时候,必要-lboost_system选项,可是你的编写翻译选项里头已经内定该选取,为何还会现出链接错误呢。作者也狐疑了半天,后来发现,原来是-l选项的顺序难题。在g++的man扶助音讯里面,小编意识了上面包车型地铁话:

答:

#include <algorithm>

引用It makes a difference where in the command you write this option;
the linker searches and processes libraries and object files in the
order they are specified. Thus, foo.o -lz bar.o searches library z after
file foo.o but before bar.o. If bar.o refers to functions in z, those
functions may not be loaded.

“boost/filesystem.hpp” 那么些文件注重于boost_system,编写翻译的时候,需求-lboost_system选项,可是你的编写翻译选项里头已经钦命该选用,为何还会现出链接错误吧。我也思疑了半天,后来意识,原来是-l选项的依次难题。在g++的man援助新闻里面,笔者发现了上边包车型客车话:

 

读完那段话,应该就清楚出错原因了。所以,化解方案就是用上面包车型地铁指令来编写翻译:

引用It makes a difference where in the command you write this option;
the linker searches and processes libraries and object files in the
order they are specified. Thus, foo.o -lz bar.o searches library z
after file foo.o but before bar.o. If bar.o refers to functions in z,
those functions may not be loaded.

int main()

引用g++ main.cpp -lboost_system -lboost_filesystem

读完那段话,应该就精通出错原因了。所以,化解方案正是用上边包车型客车一声令下来编写翻译:

{

1二.04 32bit,boost 一.4玖中期准备:boost中,用到了其余函数库,所以为了利用boost中相应的功效,必要先安装系统中或然缺点和失误的库…

引用g++ main.cpp -lboost_system -lboost_filesystem

    using namespace boost::lambda;

越多Ubuntu相关音信见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

    typedef std::istream_iterator<int> in;

威尼斯人线上娱乐 1

 

    std::for_each(

        in(std::cin), in(), std::cout << (_1 * 3) << ” ”
);

}

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

运行:echo 1 2 3 | ./example

五.备选拔取boost2进制库

  如若你的程序用到必要单独编写翻译的boost库,你需求首先获得那个二进制库文件。

5.壹编写翻译安装全数贰进制库文件

  cd $BOOST_ROOT

  ./bootstrap.sh  –help

  ./bootstrap.sh 
–prefix=/usr/local    ##其实暗中同意景况下prefix的值就是/usr/local

  此时生成了bjam可执行文件,那一个事物就是用来编写翻译boost库的。

  ./bjam  install

五.二仅安装钦命的贰进制库文件

  上面均接纳系统暗中同意的编写翻译器,即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.二.二调用bjam时不点名toolset则选用系统私下认可的编写翻译器。假如您的Linux上装了不相同版本的gcc,则应用toolset选项时能够内定版本号:toolset=gcc-四.四

  五.2.3钦定build路径,通过–build-dir=/path选项,不点名时私下认可在当下路线下成立bin.v二文件夹,把变化的文件放在其内。

  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”选项。

  全体的boost2进制库文件将身处stage/lib/下,倘诺您要别的钦命路线,请使用“–stagedir=directory”选项。

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

查看库文件名称  –show-libraries

限制build哪些库  –with-libraryname或者–without-libraryname

选料特定的build variant  adding release or debug to the command line

  友情提醒:Boost.Build会扭转很多告诉输出,假设您能确定保障建立进度不出错误,你能够禁止那几个输出以节省时间。方法:在指令后扩张”>build.log 
2>&1″

陆.把您的程序链接到boost库

  上面的主次是从邮件中抽取“主旨”内容,它利用了Boost.Regex库,这几个库是急需单独编写翻译的。

view sourceprint?

#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.一库文件的命名情势

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

lib………………………………通用前缀

boost_regex…………………库名

gcc34………………………….编写翻译时使用的toolset是gcc-三.四

mt……………………………..编写翻译时是支撑10贰线程的

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

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

陆.2周转大家的顺序

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

view sourceprint?

To: George Shmidlap

From: Rita Marlowe

Subject: Will Success Spoil Rock Hunter?


See subject.

要是大家的程序链接到了八个共享动态库,大家供给让系统领会到哪里去加载它。请看自己的~/.bashrc文件:

view sourceprint?

#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

相应出口

view sourceprint?

Will Success Spoil Rock Hunter?

获得boost boost分布
只必要头文件的库 使用boost建立二个差不离的次序 准备使用boost贰进制文件库
把你的程序链接…


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图