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 解压编译
首先要做的是获取Linux的root权限,如果当前是以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中生成boost的lib库文件,有动态的和静态的。接下来就说说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文件大小要大许多,我测试的第一种方法编译出的test为400kb+,而第二种方式编译出的test达到2M+,可见此时boost正则相关的实现代码已经编译进了可执行程序,这样就脱离的共享连接库的情况下依然可以执行此程序了,也就是说可以在一个没有装有boost的Linux主机中运行(前提是版本一致,相互兼容哦)