Linux下编译及使用boost

1.       编译

1.1          下载

http://sourceforge.net/projects/boost/files/boost

可以从以上网址下载到最新版的boost,本文以1_51_0版本为例,下载boost_1_51_0.tar.gz后缀为.gz的为Linux版本,.zip的为Windows版本

1.2          解压编译

首先要做的是获取Linuxroot权限,如果当前是以root用户登录的系统,则掠过此步骤,如果非root用户登录,需要输入sudo –s 输入密码后会以root权限执行命令

之后是进入boost压缩包所在的目录使用命令tar –xzvfboost_1_51_0.tar.gz –C /opt

此时会将boost解压至/opt目录中,然后cd /opt/boost_1_51_0进入目录执行

./boosttrap.sh此命令的目的是生成编译程序bjam,此时观察一下boost根目录会多出几个文件,之后执行./bajm –build-type=complete –toolset=gcc install

开始编译boost,此过程需要30分钟左右,编译完成后会在/usr/local/include中生成boost文件夹里面有执行需要的一些hpp文件,同时会在/usr/local/lib中生成boostlib库文件,有动态的和静态的。接下来就说说boost的使用

 

2.       Boost的使用

2.1   动态加载

这里给出将boost作为系统共享链接库进行使用的方法

第一步是设置环境变量,如果程序执行需要共享链接库,且是以动态形式加载的,则程序会自动找系统目录下的共享库,如果找不到则会报错,具体再次不做赘述

/etc/profile.d新建可执行文件boost.sh,添加文件内容:

#!/bin/sh

BOOST_INCLUDE=/usr/local/include/boost

BOOST_LIB=/usr/local/lib

export BOOST_INCLUDE BOOST_LIB

以上命令会指引应用程序在此目录下需找共享链接库,下面举例进行说明

include <iostream>
#include <string>
#include <regex.hpp>
#include <stdio.h>

int main(int argc, char **argv)
{
	
	std::string s = "who,lives:in-a,pineapple under the sea?";
	boost::regex re(",|:|-|\\s+");
	boost::sregex_token_iterator p(s.begin( ), s.end( ), re, -1);
	boost::sregex_token_iterator end;
	while (p != end) 
		std::cout << *p++ << '\n'; 
	return 0;
}

下面是编译源文件

输入命令 g++ boost_test.cpp –o test -I. –I$BOOST_INCLUDE –L. –L$BOOST_LIB –lboost_regex

此时会生成test文件./test执行即可

 

2.2   静态加载

此方法是脱离了共享连接库,将代码实现直接编译到可执行程序中

观察BOOST_LIB文件夹,里面有.so.a文件以及其对应的boost版本下面就是要使用.a文件同时加上编译选项,将代码实现编译到可执行文件中

同样是上面的例子执行编译

g++ boost_test.cpp –o test -I. –I$BOOST_INCLUDE –L. –L$BOOST_LIB –lboost_regex –static –lpthread

编译生成的test会比上种方式编译生成的test文件大小要大许多,我测试的第一种方法编译出的test400kb+,而第二种方式编译出的test达到2M+,可见此时boost正则相关的实现代码已经编译进了可执行程序,这样就脱离的共享连接库的情况下依然可以执行此程序了,也就是说可以在一个没有装有boostLinux主机中运行(前提是版本一致,相互兼容哦)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值