原文转自 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. 用随机森林分类器和GBDT进行特征筛选

    一.决策树(类型.节点特征选择的算法原理.优缺点.随机森林算法产生的背景) 1.分类树和回归树 由目标变量是离散的还是连续的来决定的:目标变量是离散的,选择分类树:反之(目标变量是连续的,但自变量可以 ...

  2. spark和MR比较

    MapReduce: 分布式的计算框架 缺点:执行速度慢 IO瓶颈 ==> 磁盘IO 网络IO shuffle机制:数据需要输出到磁盘,而且每次shuffle都需要进行排序操作 框架的机制: 只 ...

  3. C语言实现判断分数等级

    从屏幕上输入一个学生的成绩(0-100),对学生成绩进行评定: <=60为"E" 60~69为"D" 70~79为"C" 80~89为 ...

  4. 科学计算库Numpy——文件读写

    读文件 要读取的文件 有分隔符的文件 备注:delimiter分隔符. 有多余行的文件 备注:skiprows去掉几行. 指定列 备注:usecols指定使用哪几列. 写文件 保存后的文件 备注:fm ...

  5. Paul Zindel【保罗·金代尔】

    Paul Zindel Paul Zindel's death on March 27, 2003 ended the brilliant life of a famous write. 2003年3 ...

  6. poj 1258 建光迁问题 最小生成树

    题意:给全村建光纤,求花费最小 思路:最小生成树,树相对于图来说就是没有环 m用来存图 v判断是否访问 low用来存两点间的最短距离 给low赋值  for(i=1;i<=n;i++){if(i ...

  7. poj 3292 H-素数问题 扩展艾氏筛选法

    题意:形似4n+1的被称作H-素数,两个H-素数相乘得到H-合成数.求h范围内的H-合成数个数 思路: h-素数                                            ...

  8. 7、python中的字典

    字典是python内置的一种无序.可变的数据结构. 字典也叫哈希表.什么是哈希表?哈希表就是会对表中的键(key)执行哈希计算,并根据计算结果在内存中分配一个区域来储存该键所对应的值(value).这 ...

  9. Linux命令之---cp/scp

    命令简介 cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数. ...

  10. RCP 主题切换

    第一步 编写css文件,放到项目目录下 第二步 添加切换主题扩展点 第三步 设置主题   public  void switchTheme(String themeID) {           Bu ...