在上一篇boost学习文章《boost c++ library on linux初体验》中,主要讲了boost的非二进制库的使用,并实现了一个helloworld程序,此外还简单介绍了boost库的基本使用方法以及我在搭建自己的boost c++ on linux的编程环境过程中所遇到的问题和解决方案。
在本篇文章中,简要记录一下boost c++官网Getting started文档中的boost install以及在需要用到binary library时的demo程序。
boost installation & building
boost编译和安装还是比较简单的,有两种方式:easy install以及custom install。easy install就是默认安装,将会编译安装所有的模块库文件。custom install可以根据用户自己的需要选择安装部分的二进制库文件即可。安装过程的基本原理是boost的安装脚本调用g++编译器编译出lib的二进制文件,然后将二进制的.so,.a的文件拷贝到lib目录下面。
关于boost的编译和安装还有部分东西没高明白,貌似安装过程中有部分组建的安装出错了,还得详细研究一下。不过可以到/usr/local(默认安装路径)目录下的lib文件夹下看看有哪些boost二进制库已经成功安装。均为libboost_开头的二进制文件。
regex example
/*************************************************************************
> File Name: regex_example.cpp
> Author: Liu Xin
> Mail: liu_x_0625@126.com
> Created Time: 2012年07月23日 星期一 21时08分28秒
> Description:
> 提取邮件文本中的主题在console中输出
************************************************************************/
#include<boost/regex.hpp>
#include<iostream>
#include<string>
using namespace std;
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[0]: " << matches[0] << std::endl;
std::cout << "matches[1]: " << matches[1] << std::endl;
std::cout << "matches[2]: " << matches[2] << std::endl;
}else{
std::cout << "mail text line: " << line << " doesn't match the subject pattern" << std::endl;
}
}
return 0;
}
原教程中的编译命令为:
$ c++ -I path/to/boost_1_50_0 example.cpp -o example ~/boost/stage/lib/libboost_regex-gcc34-mt-d-1_36.a
或者
$ c++ -I path/to/boost_1_50_0 example.cpp -o example -L~/boost/stage/lib/ -lboost_regex-gcc34-mt-d-1_36
前者应该链接的静态库文件,后者是链接的动态链接库文件。但是,我在编译链接时发现提示找不到lib文件,于是查看/usr/local/lib下面并不存在该文件,只有libboost_regex.so和libboost_regex.a文件,于是改成这两个文件后编译成功。原因可能是教程使用的boost的版本比较老的缘故,lib的组织方式和命名方式也有所不同了。
我的编译命令:
g++ -I /usr/local/boost_1_50_0/ regex_example.cpp -o regex_example /usr/local/boost_1_50_0/stage/lib/libboost_regex.a
编译完后,在regex_example.cpp所在的文件夹下面生成了二进制文件regex_example的可执行程序。在当前文件夹下面新建一个文本文件作为测试的邮件文本内容:
To: George Shmidlap
From: Rita Marlowe
Subject: Will Sucess Spoil Rock Hunter?
---
See subject.
保存为mail.txt
运行程序:
./regex_example < mail.txt
程序输出:
mail text line: To: George Shmidlap doesn't match the subject pattern
mail text line: From: Rita Marlowe doesn't match the subject pattern
matches[0]: Subject: Will Sucess Spoil Rock Hunter?
matches[1]:
matches[2]: Will Sucess Spoil Rock Hunter?
mail text line: --- doesn't match the subject pattern
mail text line: See subject. doesn't match the subject pattern
mail text line: doesn't match the subject pattern
程序逐行读取文件内容,用正则表达式匹配行,提取邮件主题信息。
以上是今天2小时的boost学习内容,问题是boost安装还没有弄得的太清楚,有些error log。不过暂时不影响当前的使用。
至此,已经将Boost Getting started已经学玩,接下来我下载了一本讲boost开发的电子书《Boost程序库完全开发指南——深入C++标准库》,将逐步深入学习boost常用的库的使用。
最近在改一个基于linux下面c++开发的对比测试工具,现学现卖学习了Makefile的简单的编写,在本例中自己试着编写了一个Makefile文件如下:
LDFLAGS=/usr/local/lib/libboost_regex.a
CPPFLAGS=-I /usr/local/boost_1_50_0/
OBJS=regex_example.o
PROGRAM=regex_example
$(PROGRAM): regex_example.o
g++ $(OBJS) -o $(PROGRAM) $(LDFLAGS)
regex_example.o: regex_example.cpp
g++ $(CPPFLAGS) -c regex_example.cpp -o $(OBJS)
clean:
rm *.o $(PROGRAM)