一、准备
1.MinGW和Eclipse环境
关于此环境的搭建可参见:http://vin-mail.blog.163.com/blog/static/37895280201272563632186/
这里重点说明一下,关于MinGW的系统环境变量值得注意一下,因为这个涉及到eclipse能不能找到Boost库的头文件,下文我将继续上文的环境变量进行配置,这里罗列出相关环境变量:(因为我的MinGW安装在D:\OpenSoftware\MinGW)
MINGW_HOME=D:\OpenSoftware\MinGW
MINGW_VERSION=4.6.2
C_INCLUDE_PATH=%MINGW_HOME%\include;%MINGW_HOME%\lib\gcc\mingw32\%MINGW_VERSION%\include
CPLUS_INCLUDE_PATH=%MINGW_HOME%\include\;%MINGW_HOME%\lib\gcc\mingw32\%MINGW_VERSION%\include
PATH + =%MINGW_HOME%\bin;%MINGW_HOME%\libexec\gcc\mingw32\%MINGW_VERSION%
LIBRARY_PATH=%MINGW_HOME%\lib;%MINGW_HOME%\lib\gcc\mingw32\%MINGW_VERSION%
2.下载Boost并解压到指定目录
官方网站为http://www.boost.org/,笔者使用的版本是1.51.0
源码下载后,解压到自己的某个目录,笔者这里是D:\OpenSoftware\Boost_1_50_0_MinGW
3.准备bjam.exe工具
接下来打开cmd.exe,进入"D:\OpenSoftware\Boost_1_50_0_MinGW\tools\build\v2\engine\"(有些是在engine\src下有个build.bat)下,使用命令"build mingw",会在此目录下生成文件bin.ntx86\bjam.exe,将bjam.exe拷贝到boost源文件的根目录下,我这里即是:D:\OpenSoftware\Boost_1_50_0_MinGW
生成bjam.exe好像没出问题:(有意请参考附录一,这段可略过,仅供参考)
二、编译
cmd进入D:\OpenSoftware\Boost_1_50_0_MinGW目录,运行命令:bjam --build-type=complete toolset=gcc stage
我也只能说这个过程很长.....慢慢编译吧,据说有40~60minutes........我呢个汗,足足编译了两个半小时,900+M的库文件,或许是我的电脑太慢了吧!!!
编译结果:
1.头文件:我的头文件还是在D:\OpenSoftware\Boost_1_50_0_MinGW\boost文件夹里
2.库文件:所有的库文件都在D:\OpenSoftware\Boost_1_50_0_MinGW\stage\lib下
三、配置
系统环境变量:
BOOST_ROOT=D:\OpenSoftware\Boost_1_50_0_MinGW
BOOST_LIB=%BOOST_ROOT%\stage\lib
C_INCLUDE_PATH+=%BOOST_LIB%
CPLUS_INCLUDE_PATH+=%BOOST_LIB%LIBRARY_PATH+=%BOOST_LIB%
PATH +=%BOOST_LIB%
(这里用+=,你懂得,实际上是采用编辑方式追加到系统原有变量中,其他用等号的表示新建变量)
四、测试
(可以参见上一篇文章“创建HelloACE工程并配置ACE环境”:
http://vin-mail.blog.163.com/blog/static/37895280201272563632186/)
1.启动eclipse
2.创建HelloBOOST工程并配置ACE环境:
在 libraries (-l) 中 写入 boost_regex-mgw46-d-1_51(说明 它就是 libboost_regex-mgw46-d-1_51.a 去掉 lib 和.a)
* 有时需要加入 wsock32 如 使用 ACE_SOCK_Dgram 时在 library search path(-L) 中 写入"D:\OpenSoftware\boost_1_51_0_MinGW\stage\lib"
完成配置。
将工程下main所在的cpp文件修改为一下测试程序:(我也是网上找的^_^)
#include <cstdlib> #include <stdlib.h> #include "boost/regex.hpp" #include <string> #include <iostream> using namespace std; using namespace boost;
regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");
int main(int argc, char* argv[]) { std::string in; cmatch what; cout<<"enter test string"<< endl; //getline(cin,in); in = "select name from table"; if(regex_match(in.c_str(), what, expression)) { for(int i=0;i<what.size();i++) cout<<"str :"<<what[i].str()<<endl; } else { cout<<"Error Input"<<endl; } return 0; }
很明显,这是一个正则表达式的例子,呵呵,下面看下结果吧:
enter test string str :select name from table str :name str :table
可能会出现一些编译连接问题,首要解决方案是正确配置头文件搜索路径和Lib文件搜索路径,
目前有个问题就是每个工程用到的lib都需要单独添加,希望以后我能找到更好的办法,方法是:
看头文件有什么关键字 比如我这里是:regex
然后知道我们用了关于正则表达式处理的库,去库文件搜一下:libboost_regex-mgw46-d-1_51.a
当然会有很多被搜出来,我刚好选了这个而已,不知道还有什么解决方案?
附录一:bjam.exe工具生成日志
D:\OpenSoftware\boost_1_51_0_MinGW\tools\build\v2\engine>if exist bootstrap rd / S /Q bootstrap
D:\OpenSoftware\boost_1_51_0_MinGW\tools\build\v2\engine>md bootstrap
D:\OpenSoftware\boost_1_51_0_MinGW\tools\build\v2\engine>gcc -DNT -o bootstrap\j am0.exe command.c compile.c constants.c debug.c execnt.c filent.c function.c gl ob.c hash.c hdrmacro.c headers.c jam.c jambase.c jamgram.c lists.c make.c make1. c object.c option.c output.c parse.c pathunix.c regexp.c rules.c scan.c search.c subst.c timestamp.c variable.c modules.c strings.c filesys.c builtins.c md5.c p wd.c class.c w32_getreg.c native.c modules/set.c modules/path.c modules/regex.c modules/property-set.c modules/sequence.c modules/order.c
D:\OpenSoftware\boost_1_51_0_MinGW\tools\build\v2\engine>.\bootstrap\jam0 -f bui ld.jam --toolset=mingw "--toolset-root= " clean ...found 1 target... ...updating 1 target... ...updated 1 target...
D:\OpenSoftware\boost_1_51_0_MinGW\tools\build\v2\engine>.\bootstrap\jam0 -f bui ld.jam --toolset=mingw "--toolset-root= " ...found 50 targets... ...updating 3 targets... [MKDIR] bin.ntx86 [COMPILE] bin.ntx86\b2.exe [COPY] bin.ntx86\bjam.exe ...updated 3 targets...
附录二:参考文档
下面贴出我参考的文章:
来源:http://www.cppblog.com/xinus/archive/2011/03/01/build_boost_using_mingw.html
标题:MinGW编译Boost库
一、Boost Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。其官方网站为http://www.boost.org/,目前最新版本为1.46.0,以下以此版本为准。 Boost库大部分的子库都是C++模版提供,大部分情况下直接包含头文件就可以了。其中部分子库需要编译,如下图所示: 上图中bjam.exe是boost提供的编译工具,下面会介绍如何获得。
二、Mingw: Minimalist GNU for Windows 官方网站:http://www.mingw.org/ 部分同学可能和我一样,使用自带Mingw环境的IDE,比如Code::Blocks,其官方网站:http://www.codeblocks.org/。请确保Mingw工具链目录添加到系统的环境变量PATH中,比如我路径为:"D:\Program Files\CodeBlocks\MinGW\bin",并将这个目录下的mingw32-make.exe复制并重命名为make.exe。然后验证gcc等能否正常使用:开始->运行->输入"cmd"回车->命令窗口输出"gcc -v"查看gcc版本信息,如果看到如下类似输出,那么就可以继续正是编译Boost了。 三、bjam.exe bjam是boost自带的工具,用来方便地编译boost,当然也可以用来编译你自己的工程。bjam在boost源码中一起提供,需要编译才能使用,下载boost的时候会提示下载一个编译好的bjam,我不是很推荐,因为我用下载来的bjam编译boost的时候,出现一些错误,而用自己编译的bjam却顺利完成。 在"E:\_Libs_\boost_1_46_0\tools\build\v2\engine\src"下,使用命令"build mingw",会在此目录下生成文件bin.ntx86\bjam.exe,将bjam.exe拷贝到boost源文件的根目录下,如"E:\_Libs_\boost_1_46_0\"。在这个目录下的"./Jamroot"文件,详细描述了bjam的用法,建议用文本打开这个文件并阅读前面部分的注释。 四、分享 bjam --build-type=complete toolset=gcc stage 上面的命令将编译所有需要编译的子库(除python)的各种版本,编译时间稍长,约40分钟~1小时。生成的文件在./stage/lib目录下。 不同版本可以通过名称来区别,例如date_time库一共生成有16个相关文件: libboost_date_time-mgw44-1_46.a libboost_date_time-mgw44-1_46.dll libboost_date_time-mgw44-1_46.dll.a libboost_date_time-mgw44-d-1_46.a libboost_date_time-mgw44-d-1_46.dll libboost_date_time-mgw44-d-1_46.dll.a libboost_date_time-mgw44-mt-1_46.a libboost_date_time-mgw44-mt-1_46.dll libboost_date_time-mgw44-mt-1_46.dll.a libboost_date_time-mgw44-mt-d-1_46.a libboost_date_time-mgw44-mt-d-1_46.dll libboost_date_time-mgw44-mt-d-1_46.dll.a libboost_date_time-mgw44-mt-s-1_46.a libboost_date_time-mgw44-mt-sd-1_46.a libboost_date_time-mgw44-s-1_46.a libboost_date_time-mgw44-sd-1_46.a 如上,mgw44代表编译器Mingw4.4版本: mt: threading=multi s: runtime-link=static d: variant=debug .dll: link=shared