VS2019中vcpkg安装的libcpr发起HTTP请求时编译报错
问题根因
两个编译错误的核心原因是vcpkg默认安装的libcpr版本过低,和你参考的官方最新示例、文档的版本要求不匹配:
cpr::AuthMode是cpr 1.9.0版本才新增的枚举类型,更早版本的cpr::Authentication默认走BASIC认证逻辑,不需要额外传入AuthMode参数cpr::CaBuffer是cpr 1.10.0版本才加入SslOptions的成员,旧版本没有这个接口定义
解决步骤
- 清理旧版本残留
打开PowerShell切换到本地vcpkg根目录,执行命令卸载已安装的旧版cpr,根据你项目的目标架构选择对应包,x64项目执行:
如果之前装过x86版本的cpr也一并卸载,避免多版本文件冲突。.\vcpkg remove cpr:x64-windows - 安装带SSL特性的新版cpr
还是在vcpkg根目录执行安装命令,必须显式带上ssl特性,否则HTTPS相关的SslOptions系列接口不会被编译启用:
如果是32位项目,把架构后缀替换为.\vcpkg install cpr[core,ssl]:x64-windowsx86-windows即可。 - 检查VS2019项目配置
右键项目打开属性页做两项检查:- 进入「vcpkg」设置页,确认已启用vcpkg集成,项目目标架构和你安装cpr时选的架构完全一致
- 分别进入「C/C++->常规->附加包含目录」「链接器->常规->附加库目录」,删掉所有手动添加的旧版cpr路径,防止VS优先加载本地残留的旧头文件、旧库文件
- 验证安装结果
打开vcpkg目录下installed/<对应架构>/include/cpr/auth.h文件,搜索AuthMode关键字,能找到对应枚举定义就说明新版安装正确,重新生成项目即可解决报错。
临时兼容方案(不推荐)
如果暂时没有升级cpr的条件,可以把示例代码里的认证参数改成旧版兼容写法,去掉AuthMode传参:
cpr::Authentication{"user", "pass"}
这个写法在旧版cpr中默认就是BASIC认证模式,可以解决AuthMode不存在的编译错误,但CaBuffer相关的HTTPS配置接口在旧版中完全缺失,必须升级版本才能使用。
内容的提问来源于stack exchange,提问作者Anees
相关产品推荐
相关产品推荐

