在Windows10中Visual Studio2017中使用boost1.69.0

2020-03-10 16:19:11 浏览数 (1)

前言

Boost是一个功能强大、构造精巧、跨平台、开源而且完全免费的C 程序库,有着“C '准’标准库”的美誉。 Boost是由C 标准委员会部分成员所设立的Boost社区开发并维护,使用了许多现代C 编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程等。目前已经更新到了1.72.0版本,官网下载地址为:https://www.boost.org/users/history/version_1_72_0.html,由于我之前在自己Windows10系统上安装的是Boost 1.69.0,其源代码下载地址为:https://sourceforge.net/projects/boost/files/boost/1.69.0/,所以本文直接演示在VS2017下使用boost1.69.0版本,使用32位的debug模式进行测试,其他的64位和VS编译器同理。

一、从sourceforge上下载编译好的针对MSVC的boost1.69.0版本

由于从源代码直接编译Boost比较费时,所以sourceforge-boost1.69.0-msvc上有人提供了编译好的boost1.69.0的MSVC版本,如下图所示:

上图中是针对MSVC编译器即Visual VC 编译boost1.69.0的版本, 其中msvc是VC 编译器的名称,12.0代表是VS2013的版本,14.0是VS2015的版本,14.1是VS2017的版本,32和64表示是生成支持32位的还是64位的lib或dll库。

这样就不用我们自己编译Boost源代码,下载boost_1_69_0-msvc-14.1-64.exe这些文件加压缩到指定的目录后,包含对应的头文件和库文件,就可以直接在Visual Studio2017中使用了。 由于我自己的Windows10系统上同时安装了VS2013和VS2017,我下载了3个版本的,如下图所示:

  • boost_1_69_0-msvc-12.0-32.exe 下载
  • boost_1_69_0-msvc-14.1-32.exe 下载
  • boost_1_69_0-msvc-14.1-64.exe 下载

将boost_1_69_0-msvc-14.1-32.exe解压到指定目录

以boost_1_69_0-msvc-14.1-32.exe为例,解压后的目录结构如下图所示:

为了方便,我直接把boost_1_69_0-msvc-12.0-32.exe、boost_1_69_0-msvc-14.1-32.exe、boost_1_69_0-msvc-14.1-64.exe这3个程序的lib库解压到同一目录下了,分别对应lib32-msvc-12.0、lib32-msvc-14.1、 、lib64-msvc-14.1

在VS2017中使用boost1.69.0

例如,我把编译好后的boost_1_69_0源代码和lib库放置在D:env_buildboost_1_69_0目录下,其中boost目录是存放头文件的目录,lib32-msvc-12.0、lib32-msvc-14.1、 、lib64-msvc-14.1这3个目录分别对应VS2013的32位,VS2017的32位以及VS2017的64位静态库lib目录。

源代码文件:Boost_lambda_Demo.cpp

在VS2017中创建一个VC 的控制台空项目Boost_lambda,添加一个Boost_lambda_Demo.cpp文件,代码如下:

代码语言:javascript复制
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main(int argc, char* argv[])
{
	using namespace boost::lambda;
	typedef std::istream_iterator<int> in;

	std::for_each(
		in(std::cin), in(), std::cout << (_1 * 3) << "n");

	return 0;
}

如下图所示:

从上图可以看出,由于没有包含boost库的头文件,程序报错了,所以我们还得在项目中导入头文件和lib库文件所在目录。

添加boost的头文件

右键点击【Boost_lambda】-》【属性】,在弹出的项目属性页中,依次【配置属性】-> 【C/C 】-> 【常规】->【附加包含目录】,在其中加入boost1.69.0所在目录,我的是D:env_buildboost_1_69_0,这个根据自己解压的Boost库目录设置,如下图所示:

点击确定按钮后,再看程序中的红色报错提示没有了,说明项目中可以使用Boost库了,如下图所示:

运行结果如下图所示:

当然,由于boost的lambda的使用只需要包含头文件即可,所以不导入lib静态库文件也可以正常运行,但是如果是其他比如regex正则表达式需要依赖静态库的,则会报错,如下图所示:

1>LINK : fatal error LNK1104: 无法打开文件“libboost_regex-vc141-mt-gd-x32-1_69.lib” 错误原因是找不到对应的libboost_regex-vc141-mt-gd-x32-1_69.lib静态链接库

添加boost1.69.0的lib静态库文件

右键点击【Boost_lambda】-》【属性】,在弹出的项目属性页中,依次【配置属性】-> 【链接器】-> 【常规】->【附加库目录】,在其中加入boost1.69.0的lib库所在目录,由于我使用的是基于VS2017的32位x86 debug项目,所以需要加入lib32-msvc-14.1这个目录,即D:env_buildboost_1_69_0lib32-msvc-14.1,这个根据自己解压的Boost库目录进行设置,和项目是32位还是64位以及Visual Studio的版本有关,如下图所示:

由于boost regex库的使用不仅需要包含头文件,还需要包含对应的lib静态库文件,所以需要在项目中加入对应的静态库目录,如下图所示:

运行结果如下:

为了能看到boost regex的测试结果,我把程序直接放到腾讯云主机上的CentOS7.5系统下,创建了一个boost_regex.cpp的源代码文件和对应的jayne.txt文本文件 boost_regex.cpp的源代码文件:

代码语言:javascript复制
#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
	std::string line;
	boost::regex pattern("^Subject: (Re: |Aw: )*(.*)");

	while (std::cin)
	{
		std::getline(std::cin, line);
		boost::smatch matches;
		if (boost::regex_match(line, matches, pattern))
		{
			std::cout << matches[2] << std::endl;
		}
	}

	return 0;
}

jayne.txt文本文件

代码语言:javascript复制
To: George Shmidlap
From: Rita Marlowe
Subject: Will Success Spoil Rock Hunter?
---
See subject.

测试结果如下图所示:

相关资料

  • boost1.69.0的msvc编译版本下载
  • Boost C Libraries 1.72.0 下载
  • Boost Version 1.72.0 官网源代码下载
  • Boost官网

0 人点赞