Ubuntu下编写翻译安装boost库,ubuntu下boost编写翻译安装

ubuntu下boost编译安装

boost

安装

环境: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中相应的效应,须求先安装系统中或然缺点和失误的库 

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

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

3.解压下载文件,举个例子下载文件在~/Downloads下

  1. cd ~/Downloads 


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


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

4.预备安装

  1. cd
    boost_1_58 


  2. ./bootstrap.sh 


转移文书b2和bjam总结md5sum开掘双方大器晚成致
生成bjam,上述命令能够分包各类选项,具体可参照他事他说加以考查扶植文书档案: ./bootstrap.sh
–help。当中–prefix参数,能够指定安装路线,倘若不带–prefix参数的话(推荐),暗中认可路线是
/usr/local/include 和
/usr/local/lib,分别寄存头文件和各样库。试行到位后,会生成bjam,已经存在的剧本将会被自动备份。注意,boost
1.49会在当前目录下,生成四个公文bjam和b2,那三个是同等的,

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

5.编写翻译并安装boost

编写翻译完结后,举行设置,也正是将头文件和浮动的库,放到内定的渠道(–prefix)下

  1. ./b2  //编译boost 


  2. sudo ./b2 install
    //将生成的库安装到/usr/local/lib目录上面,暗许的头文件在/usr/local/include/boost目录下面。 


apt-get install libbz2-dev     #意气风发经编写翻译现身谬误:bzlib.h: No such
file or directory

6.卸载

将/usr/local/lib和/usr/local/include/boost三个目录下的文书一贯删除就足以。

上述函数库装好之后,就能够编写翻译boost库了。解压boost_1_49_0.tar.bz2,得到/boost_1_49_0,将当前专门的学业目录切换到此文件夹下。

7.测验安装是不是准确

新建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

生成bjam,上述命令能够包含各类选项,具体可参谋扶持文书档案: ./bootstrap.sh
–help。个中–prefix参数,能够指虞升卿装路线,即便不带–prefix参数的话(推荐),私下认可路径是
/usr/local/include 和
/usr/local/lib,分别寄存头文件和各个库。试行到位后,会生成bjam,已经存在的台本将会被电动备份。注意,boost
1.49会在当前目录下,生成四个公文bjam和b2,那多个是同样的,所以接下去的步骤,能够用这两当中的大肆四个来实践。

using mpi ;  #只要供给MPI功用,供给在 /tools/build/v2/user-config.jam
文书的结尾加多

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

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

注意,这里是全体编写翻译。当然也得以选用只编写翻译大器晚成部分,选项
–with-<library>
只编写翻译钦点的库,如输入–with-regex就只编写翻译regex库了。boost1.49
的一心编写翻译,在小编AMD® Core™2 Duo CPU T5750 @ 2.00GHz × 2 ,2G
DD奥德赛2内部存款和储蓄器的老机子上,使用上述选项,半小时就比超级多了。那个小时是足以担当的。全体编写翻译安装,心绪上呼吸系统感染到也直率些。^_^

bjam的片段常用的参数,列表如下:

–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 显示需要编译的库名称

编写翻译完结后,进行安装,相当于将头文件和生成的库,放到钦定的门径(–prefix)下

./b2 install

由来,要是一切顺遂,就形成安装了。写个小程序核算下,来自《Boost程序库完全开采指南——浓厚C++“准”标准库(修正版)》(罗剑锋著,电子工业出版社2013.5)

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

#include “stdcpp.hpp”

#include <boost/timer.hpp>

 

using namespace boost;

 

int main()

{

    timer t;

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

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

 

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

 

    return EXIT_SUCCESS;

}

先后输出:

max timespan: 0.596523h

min timespan: 1e-06s

now time elapsed: 0s

有关阅读:

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

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

本身也在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<boost/filesystem.hpp>那句之后立即出错,其他都没难点。不知到你有未有碰着这一个难点啊?

答:

“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.

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

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

越来越多Ubuntu相关新闻见Ubuntu 专项论题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

图片 1

发表评论