Linux上安装使用boost入门指导
Data Mining
Linux上安装使用boost入门指导
- 获得boost
- boost分布
- 只需要头文件的库
- 使用boost建立一个简单的程序
- 准备使用boost二进制文件库
- 把你的程序链接到boost库
1.获得boost
解压
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 ShmidlapFrom: Rita MarloweSubject: Will Success Spoil Rock Hunter?---See subject. |
如果我们的程序链接到了一个共享动态库,我们需要让系统知道到哪儿去加载它。请看我的~/.bashrc文件:
#boostexport 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入门指导的更多相关文章
- [Zephyr] 1、在linux上安装Zephyr-OS并跑DEMO
星期五, 14. 九月 2018 02:18上午 - BEAUTIFULZZZZ 0) 前言 Zephyr™项目是一个采用Apache 2.0协议许可,Linux基金会托管的协作项目.为所有资源受限设 ...
- Linux 上安装 weblogic12C (静默安装) (一)
最近负责在linux上安装weblogic,客户说要安装最新的版本,版本号为 12.1.X(12.1.2,12.1.3).开始以为和旧版安装一样,使用控制台的方式,下载bin文件,然后一步步在cons ...
- 在Windows和Linux上安装paramiko模块以及easy_install的安装方法
一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...
- 在Linux上安装Oracle RAC 12 c(12.1) 虚拟机,一步一步向导
Oracle RAC 12 c(12.1)在Linux上安装虚拟机,一步一步向导 今天我们将看到如何安装 12 c版本1 RAC(真正的应用程序集群)数据库2 Linux 64位的虚拟机 使用VMWa ...
- WINDOWS和Linux上安装php7 alpha 并安装 yaf
WINDOWS和Linux上安装php7 alpha 并安装 yaf PHP技术 widuu 2个月前 (06-15) 126浏览 0评论 windows 1.windows上安装 php7 ...
- 在Windows和Linux上安装paramiko模块
一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...
- 如何在Linux上安装Storm
Storm是开源的分布式实时计算系统,能够让数据流处理变得简单.可靠,也因此在大数据领域有广泛的实际 应用.下面介绍一下如何在Linux系统上安装Storm.根据Storm官网介绍,安装Storm软件 ...
- linux上安装Drupal
linux上安装Drupal 前言:国内用drupal的并不太多,网上资料也很少.要注意的是drupal尽量别使用apt来安装,特别是ubuntu平台的drupal做出了一定的更改,会妨碍后期的学习和 ...
- 在Linux上安装Hadoop
先决条件: Hadoop是用JAVA写的,所以首先要安装Java.在Ubuntu上安装JDK见:http://blog.csdn.net/microfhu/article/details/766739 ...
随机推荐
- 未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。
未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个 ...
- 【转】大数据以及Hadoop相关概念介绍
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4230220.html 感谢! 一.大数据的基本概念 1.1.什么是大数据 大数据指的就是要处理的数据是TB级别以 ...
- 【下载】支持中文的 jspSmartUpload jar 包
http://www.blogjava.net/hijackwust/archive/2007/08/22/138598.html —————————————————————————————————— ...
- [转载]关于AutoCAD.NET的辅助方法
转载自:http://www.cnblogs.com/milian/p/3315000.html 求中点坐标: /// <summary> /// 中点 /// </summary& ...
- ThinkPad X200s 安装 Mac OSX
===================先说一下注意事项================== 无论任何安装方法(U盘.光盘)不能进入安装界面,或者鼠标无法移动.那就在变色龙引导界面加入以下代码 cpus ...
- UITextFiled,UIButton,UIImageView交互相互之间的事件拦截
UIButton右上方添加一个笑button如: UIButton *button =[UIButton buttonWithType:UIButtonTypeCustom]; button.f ...
- 利用HTML5开发Android(4)---HTML5本地存储之Web Storage
Web Storage是HTML5引入的一个非常重要的功能,可以在客户端本地存储数据,类似HTML4的cookie,但可实现功能要比cookie强大的多,cookie大小被限制在4KB,Web Sto ...
- OC:继承、初始化方法、便利构造器
A继承 的作用就是为了,节省代码. 继承 :子类会继承父类 里面所有的内容 思想 :凡是继承过来的实例变量和方法 都是自己的(是从父类遗传过来的) 继承的使用场景 : 当我们多 ...
- [转]NTLM身份验证
链接:http://www.360doc.com/content/12/0615/14/10216164_218320534.shtml 在允许的环境下,Kerberos是首选的认证方式.在这之前,W ...
- 在js中使用createElement创建HTML对象和元素
1.创建链接 <script language="javascript"> var o = document.body; //创建链接 function createA ...