最近的工作需要使用<boost/unordered_map.hpp>,所以接触到了boost这个库,但是在编译使用的过程中遇到了一些麻烦,最后在网上搜索方法才解决。
感谢博文http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html
首先是下载boost,这个不用多说,感觉挺大的,下载完毕后解压缩,需要一些时间。。。我的版本是boost_1_55_0。
下载后的库需要手动编译,因为安装了codeblocks,所以一定有MinGW(可以在你的codeblocks安装目录下找到),将其中的bin目录加入到环境变量中,这样方便使用gcc编译。我的目录是E:\Program Files\CodeBlocks\MinGW\bin。加入后在cmd中输入gcc -v,如果显示gcc版本等信息,则完成。
使用cmd进入boost解压后的文件夹下,这里需要找到build.bat,因为需要运行这个脚本来生成bjam.exe,这是一个用来编译boost的程序。我的build.bat在F:\Download\boost_1_55_0\boost_1_55_0\tools\build\v2\engine目录下,因为版本的不同,可能目录也不尽相同,不行就搜索一下。找到后,使用cmd cd到这个目录下,运行build.bat gcc,之后会生成bin.ntx86文件夹,里面就有我们要的bjam.exe,将其复制到boost的最外层目录下,我的是F:\Download\boost_1_55_0\boost_1_55_0。
接下来是编译boost。
接下来就是最重要的编译步骤了。需要打开命令提示符(cmd.exe)窗口并执行bjam,可以使用--help参数来查看命令帮助。这里详细讲解一下bjam的命令行参数,因为它非常重要。首先,它涉及到编程环境的搭建,你需要根据自己今后具体的使用环境来选择合适的命令行参数;其次,它影响到你的硬盘空间,完全编译的话据说在3G以上,如果你同时拥有2个以上的IDE(如VC6和VC9共存)而且都要用到boost,那么占用多少硬盘就自己算吧……虽说如今大家的硬盘空间都不成问题,但就像本人一样崇尚合理利用资源不习惯铺张浪费提倡节俭的童鞋应该大有人在,所以不需要的配置和不需要的库就可以不编译了。综合以上两点因素,本人使用的bjam命令如下:
bjam stage --toolset=gcc --without-graph --without-graph_parallel --without-math --without-mpi --without-python --without-serialization --without-wave --stagedir="E:\boost" link=static runtime-link=shared runtime-link=static threading=multi debug release
下面详细解释一下每个参数的含义:
需要注意的是,如果使用VS2008编译boost(其他版本VC未作测试,可能也有类似问题),那么假如你调用boost的主程序添加了_BIND_TO_CURRENT_VCLIBS_VERSION预定义宏来强制使用最新版本的Windows CRT库,那么你的boost也需要添加这个预定义宏来进行编译,否则会导致程序因为各模块使用的CRT库版本不统一而出现“在某些机器上运行提示‘由于应用程序配置不正确,应用程序未能启动’的问题”,关于该问题请参考我的另外一篇文章:【原】解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题。添加该预定义宏的方法是:打开boost安装根目录下的boost\config\compiler\visualc.hpp,在最上面增加:
#ifndef _BIND_TO_CURRENT_VCLIBS_VERSION
#define _BIND_TO_CURRENT_VCLIBS_VERSION 1
#endif // _BIND_TO_CURRENT_VCLIBS_VERSION
这种方法修改了boost的源码,并非我所愿, 但是无奈没有找到更好的方法,如果有人知道希望能够留言告诉我。
2、占用若干小时的编译时间
3、生成的很多文件可以永远也用不上
点击settings->Compiler settings,在标签中点击search directories,在Compiler中点击Add,将下载下来的boost源文件夹F:\Download\boost_1_55_0\boost_1_55_0中的boost文件夹目录加入,里面包含着各种头文件,或者拷贝到刚刚编译的文件路径下,这样更加统一,即将E:\boost\boost_1_55_0加入,我这里的E:\boost\boost_1_55_0目录下拷贝了刚才的boost文件夹,注意,路径不要深入到boost文件夹下,否则使用的时候不方便。在Linker中加入刚刚编译出来的lib问价夹,E:\boost\lib。确定即可。
使用的时候包含所用头文件即可。