Eclipse+MinGW+Boost环境搭建成功

来源:互联网 发布:电脑做图软件 编辑:程序博客网 时间:2024/05/18 03:34
Eclipse+MinGW+ACE环境搭建成功
 
Elipse遇到的问题

Eclipse+MinGW+Boost环境搭建成功  

2012-08-25 23:12:10|  分类:C/C++ |字号 订阅

一、准备

1.MinGW和Eclipse环境

关于此环境的搭建可参见:http://vin-mail.blog.163.com/blog/static/37895280201272563632186/

这里重点说明一下,关于MinGW的系统环境变量值得注意一下,因为这个涉及到eclipse能不能找到Boost库的头文件,下文我将继续上文的环境变量进行配置,这里罗列出相关环境变量:(因为我的MinGW安装在D:\OpenSoftware\MinGW)

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%
(这里用+=,你懂得,实际上是采用编辑方式追加到系统PATH变量中,其他用等号的表示新建变量)
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环境:

启动eclipse.exe后,File->New->C++ Project
Project Name:HelloBOOST
Project Type:Executable->Hello wold Project
Tool Chains:MinGW GCC

在 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 stringstr :select name from tablestr :namestr :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\jam0.exe command.c compile.c constants.c debug.c execnt.c filent.c function.c glob.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 pwd.c class.c w32_getreg.c native.c modules/set.c modules/path.c modules/regex.cmodules/property-set.c modules/sequence.c modules/order.c

D:\OpenSoftware\boost_1_51_0_MinGW\tools\build\v2\engine>.\bootstrap\jam0 -f build.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 build.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库

 

一、BoostBoost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。其官方网站为http://www.boost.org/,目前最新版本为1.46.0,以下以此版本为准。Boost库大部分的子库都是C++模版提供,大部分情况下直接包含头文件就可以了。其中部分子库需要编译,如下图所示:使用MinGW编译Boost - Gavin Tung - 文文博客上图中bjam.exeboost提供的编译工具,下面会介绍如何获得。

Windows下面使用Boost,可以下载编译好的二进制安装包,下载网址是:http://www.boostpro.com,不过目前上面提供1.44版的安装包下载,而且使用VC编译的。本文介绍如何使用Mingw编译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了。使用MinGW编译Boost - Gavin Tung - 文文博客三、bjam.exebjamboost自带的工具,用来方便地编译boost,当然也可以用来编译你自己的工程。bjamboost源码中一起提供,需要编译才能使用,下载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.alibboost_date_time-mgw44-1_46.dlllibboost_date_time-mgw44-1_46.dll.alibboost_date_time-mgw44-d-1_46.alibboost_date_time-mgw44-d-1_46.dlllibboost_date_time-mgw44-d-1_46.dll.alibboost_date_time-mgw44-mt-1_46.alibboost_date_time-mgw44-mt-1_46.dlllibboost_date_time-mgw44-mt-1_46.dll.alibboost_date_time-mgw44-mt-d-1_46.alibboost_date_time-mgw44-mt-d-1_46.dlllibboost_date_time-mgw44-mt-d-1_46.dll.alibboost_date_time-mgw44-mt-s-1_46.alibboost_date_time-mgw44-mt-sd-1_46.alibboost_date_time-mgw44-s-1_46.alibboost_date_time-mgw44-sd-1_46.a如上,mgw44代表编译器Mingw4.4版本:mt: threading=multi s: runtime-link=staticd: variant=debug.dll: link=shared