在VS2013中使用boost库遇到的问题及解决

最近的项目须要集成一个使用了boost库的开源库。本来应该是比较简单的工做,由于使用的是VS2013,而boost库是最新下载的1.60.0版本(注:写这篇文章时1.61.0恰好release),结果仍是费了一点工夫。如今把它记下来,给本身留个记录备查吧。html

通过这么久的发展,boost库其实用起来已经很简单了。首先下载新版本的包。在windows下,用zip格式的包是最方便的。而后随便解压到一个目录下,我是解压到了D盘,完成后boost库就放在D:\boost_1_60_0目录下了。bootstrap

接下来就能够编译boost库了。在命令行下进入D:\boost_1_60_0,运行bootstrap.bat进行配置。配置完成后,显示的提示是运行刚生成的b2.exe便可进行编译。网上一些旧的教程说的是运行bjam.exe,这也是能够的,由于这两个文件其实彻底同样,boost多是为了兼容之前的使用习惯,生成exe后更名复制了一份。windows

编译的时间较长,但只要以前VS已经正常安装和使用,总会编译完成的。结束后,提示以下:ui

The Boost C++ Libraries were successfully built!spa

The following directory should be added to compiler include paths:命令行

    D:\boost_1_60_0htm

The following directory should be added to linker library paths:教程

    D:\boost_1_60_0\stage\libip

这两个目录就是头文件包含目录和库文件查找目录了,把它们加到本身的VS工程的相应配置项里,就可使用boost库了。get

到目前为止彷佛一切正常,但一启动工程的编译,马上有大量报错出现,并且所有是boost的头文件报错。怎么回事,难道boost有问题?仔细检查报错信息,看起来和新的C++规范的支持有关。搜索一些资料了解了一下,基本上肯定是由于最新的boost库使用了C++14规范,而VS2013要在update5以后才支持C++14,因此出错了。难怪boost编译过程当中出现了大量的error,虽然最后仍是编译完了,但仍是提示有部分项目是fail和skip了的。

那么如何解决呢?由于VS2013的update5有6G这么大,一开始实在不想下载,因此考虑可否换用旧一些版本的boost。通过一些尝试,最后放弃了这一方案,由于比较新的boost已经用了新规范了,而太旧的boost又没有工程须要的功能。因此仍是老老实实的下载update5吧,微软官网上好象已经没有链接了,好在找到了https://go.microsoft.com/fwlink/?LinkId=519391这个链接,仍然能够下载,并且速度还不错。

下载完成,安装升级VS2013到update5,从新编译boost,此次没有error了,虽然仍是有warning,可是不影响。

接下来打开工程编译,果真没有编译错误了!一路顺利到连接阶段,又报了个错误:找不到libboost_system-vc120-mt-sgd-1_60.lib这个库。检查了boost的库文件目录,确实没有这个库,但有一个libboost_system-vc120-mt-gd-1_60.lib。这是什么状况呢?

查了一下这两个库的状况,知道带s的库是用在静态库链接的工程中(命令行参数为/MT和/MTd),不带s的用在动态库工程中(/MD和/MDd)。有一种方案是提议改用/MD参数,这也太将就了吧......

其实完全解决这个问题并不难,用“b2 --build-type=complete”再彻底编译一次boost就能够了,这个参数是要求boost生成全部的项目,而以前不加参数默认是最小生成模式。

相关文章
相关标签/搜索