尽管新版的Open C/C++ SDK的发布支持了stlport, boost等库,但boost的支持尚不完整。前些时曾初步测试Regex库,编译时提示系统头文件中有许多错误。近日得空终于使得这个测试例子能运行了。下面描述具体过程:
我的测试环境是: SDK: S60 3rd MR Ed + Open C/C++ SDK; IDE: Carbide.c++ 1.3
0、准备工作
安装OpenC/C++ SDK,这里就不赘述了。然后以该SDK附带的boost例子为基础创建一个regex_ex例子项目。Regex例子可以在网上找一个,比如这里的:
http://www.cs.brown.edu/~jwicks/boost/libs/regex/doc/examples.html
http://www.onlamp.com/lpt/a/6535
1、自定义boost的选项:
打开boost/config/user.hpp文件,定义下面两个宏: (原来就有,把注释符号去掉就行了)
#define BOOST_DISABLE_WIN32
#define BOOST_ALL_NO_LIB
2、修改MIN_WCHAR的定义
打开wchar.h文件,将
#define WCHAR_MIN (wchar_t)__INT_MIN
改为
#define WCHAR_MIN __INT_MIN
即,去掉wchar_t强制转换。否则这个在宏判断时导致莫名其妙的问题。
可保留 WCHAR_MAX的定义不变,没有用到。
3、修正Boost.Regex库中的一个问题:
打开boost/regex/v4/basic_regex_parser.hpp,修改
- std::ptrdiff_t len = (std::min)(static_cast<std::ptrdiff_t>(2), m_end - m_position);
为
- std::ptrdiff_t len = (std::min)(static_cast<std::ptrdiff_t>(2), static_cast<std::ptrdiff_t>(m_end - m_position));
4、编译与链接regex的源代码
不知Open C/C++ SDK是否有Boost.Regex库的lib文件,我采用的是直接从Regex源代码编译(下载Boost1.35)。
最后,Boost.Regex测试例子在Emulator与真机上均顺利通过。