原文转自 https://my.oschina.net/SunLightJuly/blog/676891?p=1

最近的项目需要集成一个使用了boost库的开源库。原本应该是比较简单的工作,因为使用的是VS2013,而boost库是最新下载的1.60.0版本(注:写这篇文章时1.61.0刚好release),结果还是费了一点工夫。现在把它记下来,给自己留个记录备查吧。

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

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

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

The Boost C++ Libraries were successfully built!

The following directory should be added to compiler include paths:

D:\boost_1_60_0

The following directory should be added to linker library paths:

D:\boost_1_60_0\stage\lib

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

到目前为止似乎一切正常,但一启动工程的编译,立刻有大量报错出现,而且全部是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参数,这也太将就了吧......

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

在VS2013中使用boost库遇到的问题及解决(转)的更多相关文章

  1. 如何在VS2013中进行Boost单元测试

    对于如何在VS2013中进行Boost单元测试,这方面资料太少.自己也因此走了不少弯路.下文将会阐述一下如何在VS2013中进行Boost单元测试. 在开始Boost单元测试之前,我们需要先安装VS2 ...

  2. 在VS2013下配置BOOST库

    1.安装Boost库 (1).首先打开Boost的官网(http://www.boost.org/),找到下载位置,如下图中红框所示,此时最新的版本是1.64.0: (2).点击进入下载页面,选择你需 ...

  3. 在Visual Sutdio 2017中使用boost库

    在Visual Sutdio 2017中使用boost库     转载 https://blog.csdn.net/u011054333/article/details/78648294 对C++有一 ...

  4. 在RedHat 7.2中安装boost库

    在RedHat 7.2中安装boost库 环境,其它版本类似 Redhat7.2 64bit boost 1.64.0 步骤 去 boost官网 下载想要版本的.tar.gz,如下图 解压tar -v ...

  5. VS2013环境下Boost库配置

    序言 最近了解各大互联网公司的校招要求,发现了解Boost程序库也是不可或缺的一部分~ 于是,决定潜心研究下,这个准标准库~ 首先,在官网下载boost的最新版本Boost 1.59.0,这是当前的最 ...

  6. VS2012中使用Boost库的方法(超级简单)

    很不错的博客一定得看 http://my.csdn.net/caimouse 1.下载boost库 从http://www.boost.org上下载到目前最新的boost库,快速传送门:boost_1 ...

  7. Qt中使用Boost库

    关于boost库的编译,请看https://www.cnblogs.com/HackerArt/p/10539516.html 网上可以查到很多介绍qt使用库文件的教程,但是大多都没有注意到,qt中支 ...

  8. 在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)

    最近使用Boost库做多线程开发,可视在vs中编译工程师总是遇到Macro redefinition错误,类似下面的错误描述 1>c:\program files (x86)\microsoft ...

  9. VS2013 中使用 CxImage 库时用Unicode编码时出现链接错误

    CxImage 本身是支持Unicode 编码的,编译CxImage库的时候选择编译Unicode就可以了,得到的lib文件和dll文件很容易看出有个u的就是Unicode编码的 当然在使用的时候要对 ...

随机推荐

  1. 十四、MySQL UPDATE 查询

    MySQL UPDATE 查询 如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作.. 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 S ...

  2. vue.js 服务端渲染nuxt.js反向代理nginx部署

    vue.js的官方介绍里可能提到过nuxt.js,我也不太清楚我怎么找到这个的 最近项目vue.js是主流了,当有些优化需求过来后,vue还是有点力不从心, 比如SEO的优化,由于vue在初始化完成之 ...

  3. JZOJ 5455. 【NOIP2017提高A组冲刺11.6】拆网线

    455. [NOIP2017提高A组冲刺11.6]拆网线 (File IO): input:tree.in output:tree.out Time Limits: 1000 ms  Memory L ...

  4. 笔记1 python入门学习笔记

    目录 官方手册 菜鸟站手册地址: python的运行方法 注释 小技巧: input()接收用户输入的内容(默认为字符串) print() 运算符 is 是判断两个标识符是不是引用自一个对象 all和 ...

  5. Android四大基本组件介绍及生命周期

    Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一.了解四大基本组件 Activity ...

  6. 动态规划:HDU-1203-0-1背包问题:I NEED A OFFER!

    解题心得: 动态规划就是找到状态转移方程式,但是就本题0-1背包问题来说转移方程式很简单,几乎看模板就行了. 在本题来说WA了很多次,很郁闷,因为我记录v[i]的时候i是从0开始的,一些特殊数据就很尴 ...

  7. laravel5.2总结--序列化

    序列化 构建Json格式的API接口时,经常需要转换 '模型' 和 '关联关系' 为数组或者JSON. 1>转换模型为数组:   $user = App\User::with('roles')- ...

  8. Python抓取视频内容

    Python抓取视频内容 Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具 ...

  9. Python-S9-Day116——Flask框架相关

    01 内容回顾 02 Flask框架:路由和视图(一) 03 Flask框架:路由和视图(二) 04 Flask框架:路由和视图(三) 05 Flask框架:路由和视图(四) 06 Flask框架:s ...

  10. sql cte的使用

    cte是可以连续使用的,多个cte用逗号隔开,但是只能有一个with 百度文章标题:Sql server中使用with as 提高性能+高效分页