背景:
一、VS2015+Boost1.79.0时出现的问题情况
1、前言
2、问题发现
3、排查找原因
二、VS2015+Boost1.69.0正确编译使用
1、执行bat文件
2、运行exe文件,编译lib库
3、VS2015包含库使用
背景:
本机电脑window10上已经安装过VS2010、VS2022后,由于之前想要研究boost库这方面的知识。就在官网上下载过1.79.0版本的boost库,并且编译并在VS2022上正确使用过。
但由于boost可视化工具Graphical Debugging版本的限制,VS2022上无法安装可视化插件,一直没能继续创作。不过日前基于需要,在本机上又下载安装了VS2015。基于此就可以在vs2015上编译使用boost库了。
一、VS2015+Boost1.79.0时出现的问题情况
1、前言
在已有VS2015软件和Boost1.79.0库的基础上,直接重新编译适合VS2015的boost库。直接双击b2.exe会直接索引vs2022环境生成14.3版本的lib库。
一般来说直接包含boost的头文件就可以使用boost的基础功能,但是要使用到boost比较复杂的组件就需要加上lib库,我们用boost::geometry功能就需要对应的lib库了;一般在解压库包后顺便就编译一下lib库,避免后期使用到组件之后出现各种问题而不知所措。这里重新使用命令行编译生成14.0的库:
b2.exe install --toolset=msvc-14.0 --build-type=complete --prefix=D:\build link=static runtime-link=shared runtime-link=static threading=multi debug release
msvc-14.0
指的是vs2015编译器,--prefix后面的路径是生成.h和.lib的存放路径
2、问题发现
编译完boost静态库后,在vs2015上新建工程,并且引入boost库(boost库的调用步骤详见Windows下Boost库的安装与使用),然后写入测试案例,进行生成编译,却一直报如下的错误:
3、排查找原因
首先我们知道“Boost.Geometry in Boost 1.73 deprecates support for the C++03 and will require C++14 from Boost 1.75 onwards”自Boost1.73后需要匹配C++14版本的编译平台了。
然后查看vs2015对应c++版本可参考:
vs不同版本支持的c++版本和PlatformToolset,及在vs中切换c++版本 - 知乎 (zhihu.com)
发现C++14:vs2017就可以完全支持,vs2015基本支持,vs2013部分支持。
虽说vs2015应该能够支持的,可不管怎么编译boost1.79库都是报以上错误。那么只能是boost库不兼容,需要降boost库版本了,下载1.73.0之前版本的boost库包均可。
二、VS2015+Boost1.69.0正确编译使用
Boost1.69.0类似1.79版本的下载编译过程,这里简单介绍。
1、执行bat文件
在官网老版本中下载boost1.69.0版本,解压,双击bootstrap.bat(或者,在cmd框中执行bat文件)执行过程中先出现‘Building Boost.Build engine’需要等待一小会执行完成就会生成b2.exe和bjam.exe。
注:cmd框最好在‘开始’打开‘VS2015 的 MSBuild 命令提示符’
2、运行exe文件,编译lib库
在VS2015 的 MSBuild 命令提示符框下,转到解压文件夹路径下,然后执行以下命令进行编译:
bjam stage --toolset=msvc-14.0 architecture=x86 address-model=32 --without-graph --without-graph_parallel --stagedir="(生成的路径)" link=static runtime-link=shared runtime-link=static threading=multi debug release
编译过程需要半个小时左右吧,时间快慢由个人笔记本性能决定。
注:这里编译方式多样,但效果均可达到。例如:直接双击b2.exe会生成stage文件夹,里面就有lib文件夹;用上面命令行,注意‘(生成的路径)’换成自己需要的文件夹名;还可以将bjam换成b2也是可以的;b2 install …等等也ok。
3、VS2015包含库使用
在vs2015上新建工程,并且引入boost库(boost库的调用步骤详见Windows下Boost库的安装与使用),然后写入测试案例,进行生成编译。
再在 C/C++->常规->附加包含目录 中加上包含目录路径;在 链接器->常规->附加库目录 中加上库目录路径。