linux boost教程,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

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

#include

#include

#include

int main()

{

using namespace boost::lambda;

typedef std::istream_iterator 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

#include

#include

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 

应该输出

Will Success Spoil Rock Hunter?0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vps如何linux内核4.19,Linux kernel 4.19 RC1 发布,一个相当大的版本

原标题&#xff1a;Linux kernel 4.19 RC1 发布&#xff0c;一个相当大的版本Linus Torvalds今天发布了第一个候选版本(RC)&#xff0c;正式启动了即将推出的Linux 4.19内核系列的开发周期。自Linux 4.18内核系列推出以来已经过去两周了&#xff0c;因此下一个主要版本Linux ke…

linux下变量名长度,Linux中shell的变量介绍

Linux中shell的变量介绍发布时间&#xff1a;2020-06-24 16:20:39来源&#xff1a;亿速云阅读&#xff1a;112作者&#xff1a;元一这期内容当中的小编将会给大家带来有关Linux中shell的变量介绍&#xff0c;以专业的角度为大家分析和叙述&#xff0c;阅读完这篇文章希望大家可…

0 0/2 * * * ? linux文本含义,Linux基础2.0

1、硬盘使用的步骤识别硬盘 > 分区规划 > 格式化 > 挂载使用2、列出创建ext3、ext4、xfs、fat32文件系统的格式化工具及用法mkfs.ext3 分区设备路径mkfs.ext4 分区设备路径mkfs.xfs 分区设备路径mkfs.vfat -F 32 分区设备路径3、开机自动挂载配置文件及6个字段/etc/fs…

linux如何加载镜像,linux可以加载iso镜像文件到启动项吗

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼楼主的需求描述不清&#xff0c;不作评述。只说下关于楼上一些吧友提到的grub loopback设备可mount iso并读取其中文件的功能未读过grub1/2的源码&#xff0c;不太了解其实现原理&#xff0c;但从应用上来说&#xff0c;这个设备不…

10个linux awk文本处理经典案例,关于AWK的10个经典案例

1、分析访问日志(Nginx为例)日志格式&#xff1a; $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" 统计访问IP次数&#xff1a; # awk…

arm linux 存储,linux arm的存储分布那些事

原标题&#xff1a;linux arm的存储分布那些事linux arm 内存分布总览上图是linux的arm的虚拟地址分布总览&#xff0c;我们按从低地址到高地址的顺序逐个描述&#xff0c;每项的描述包括如下的内容的组和&#xff1a;地址范围大小&#xff0c;虚拟转物理的接口函数&#xff0c…

linux恢复终端默认配置,以gnome-terminal为例,修改gnome3 的默认配置,

以gnome-terminal为例&#xff0c;修改gnome3 的默认配置&#xff0c;gnome连续几个版本的terminal默认配置文件都是同一个配置文件“b1dcc9dd-5262-4d8d-a863-c897e6d979b9”。这是因为gnome的developers编辑了这个配置文件并作为gnome-terminal的默认配置文件&#xff0c;用来…

c语言字符串文库总结,C语言程序设计入门:字符串函数

版权声明&#xff1a;以上文章中所选用的图片及文字来源于网络以及用户投稿&#xff0c;由于未联系到知识产权人或未发现有关知识产权的登记&#xff0c;如有知识产权人并不愿意我们使用&#xff0c;如果有侵权请立即联系&#xff1a;55525090qq.com&#xff0c;我们立即下架或…

vs写c语言能用scanf,【PAT编写代码时遇到的问题】vs中使用scanf(%c,x);

首先&#xff0c;为了在VS中使用scanf&#xff0c;可以在程序开头加上#pragma warning(disable:4996)昨天在编写程序的时候&#xff0c;突然发现在循环中使用scanf("%c",&x);的时候&#xff0c;发现结果很奇怪&#xff0c;只能读入和输出我所输入的数据的一半。后…

大数计算器概念c语言,用C语言求两个超大整数的和

用C语言求两个超大整数的和在生活中&#xff0c;我们经常需要计算非常大的数&#xff0c;但是任何一种计算器都有计算范围&#xff0c;一旦超过计算范围就会有精度的损失。或许有同学认为我们可以通过程序来解决&#xff0c;比如对于C语言来说&#xff0c;我们定义一个long lon…

3 5的二维数组C语言程序,C语言及程序设计提高例程-33 二维数组元素的引用

贺老师教学链接 C语言及程序设计提高 本课讲解输入输出二维数组元素#include int main(){int s[3][5], i, j;printf("Input 3*5 numbers\n");for (i0; i<3; i)for(j0; j<5; j)scanf("%d", &s[i][j]);for (i0; i<3; i){for(j0; j<5; j)pri…

android程序 幻灯片,Android:ViewPager制作幻灯片

public class MainActivity extendsActivity {//ViewPagerprivateViewPager viewpager;//幻灯片图片资源private int [] imgArray{R.drawable.view1,R.drawable.view2,R.drawable.view3};//图片数组private ArrayListviewlist;privateImageView imageView;//点点privateViewGro…

android获取图片方向并旋转,Android 判断imageview角度并旋转

/*** 读取照片exif信息中的旋转角度** return角度 获取从相册中选中图片的角度*/public static float readPictureDegree(String path) {int degree 0;try {ExifInterface exifInterface new ExifInterface(path);int orientation exifInterface.getAttributeInt(ExifInterf…

android键盘移动光标,在Android键盘上完成键

Jos Silva..12代替ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));尝试ic.performEditorAction(EditorInfo.IME_ACTION_GO);执行的操作应该是在EditorInfo上定义的操作,它将在方法onStartInputView上传递给您要在操作之间切换,请使用:(sEditorI…

android 远程桌面连接闪退,远程桌面一点连接就闪退,不能弹出输入账号密码窗口...

您好&#xff0c;感谢您在我们论坛发帖。首先&#xff0c;按照您的描述&#xff0c;正常情况下&#xff0c;您的客户端可以远程连接您的服务器&#xff0c;输入IP和端口之后&#xff0c;会弹出验证框&#xff0c;输入账户密码之后即可进入服务器的桌面。当出现问题时&#xff0…

com.sec.android.app.smartclipservice,EPR Aerospace News

The World Cup Ball And Its Astonishing Effects Can Be Easily Explained Through TheTheory Of Dynamic Interactions, Which Also Applies To The Flight Of The Boomerang.The official World Cup ball, the so called “Jabulani”, which has been object of a lot of c…

signature=5bcdc11c0d509d82e0d44c544cfad97b,江苏省职称计算机考试新职称光盘试卷

试卷一1、世界上第一台电子数字计算机采用的主要逻辑部件是(D)A光电管 B继电器 C晶体管 D电子管2、世界上首次提出存储程序计算机体系结构的是(D)A艾伦〃图灵 B莫奇莱 C乔治〃布尔 D冯〃诺依曼3、计算机最主要的工作特点是(A)A存储程序与自动控制 B高速度与高精度C可靠性与可用…

html表格内文字置顶,css如何让table里的字居中?

css如何让table里的字居中&#xff1f;下面本篇文章就来给大家介绍一下使用CSS让table里字居中的方法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。在CSS中&#xff0c;可以通过设置text-align: center;和vertical-align:middle;来…

你是怎么理解HTML语义化,HTML语义化标签理解

1&#xff1a;语义化标签是什么&#xff1f;语义化标签&#xff0c;目的是让标签有自己的含义语义化非语义化如上代码&#xff0c;p标签含义就是段落&#xff0c;而span标签毫无意义。2&#xff1a;语义化标签好处方便用户阅读&#xff0c;页面更加清晰。更好的SEO&#xff0c;…

html5离开网页自动暂停,通过html5代码在网页中实现播放和暂停音乐mp3,mav等文

介绍通过html5代码在网页中实现播放和暂停音乐mp3,mav等文件的具体操作方法。这样对于用户来说&#xff0c;在线可播放功能能大大提高站内效率也可带来一定的流量。希望对有需要的朋友有所帮助。这里我们需要先了解下&#xff0c;在html5中的两个个重要标签。阿里西西web开发网…