C++使用cpr库发起GET请求编译运行报错,出现内部错误如何解决?
问题修复方案
首先明确:你遇到的是编译阶段错误,和运行时的网络、防火墙配置完全无关,排查方向不需要考虑网络相关设置。
报错根因
你当前使用的MinGW 6.3.0默认使用C03标准编译代码,而cpr库依赖C11及以上版本的标准,用到的std::mutex、std::future都是C++11才引入的标准库组件,低版本标准下无法识别这些类型,就会触发你看到的两类报错。
修复步骤
- 编译时指定C++11及以上的编译标准
在你的编译命令中添加-std=c++11(或更高的-std=c++17)参数,同时要链接cpr依赖的curl库,参考编译命令:g++ meantest.cpp -o meantest -std=c++11 -lcpr -lcurl - 更换支持posix线程模型的MinGW版本
如果你添加标准参数后仍然报错,说明你当前使用的MinGW是win32线程模型版本,不支持C++标准并发组件,需要更换为posix线程模型的MinGW版本,或直接升级到最新的MinGW-w64版本。 - 可选:补充标准头文件引入
如果cpr头文件没有自动引入依赖的并发头文件,可以在你代码的最顶部添加两个标准头文件:
修改后的完整代码参考:#include <mutex> #include <future>#include <mutex> #include <future> #include <iostream> #include <cpr/cpr.h> #include <string> int main() { cpr::Response r = cpr::Get(cpr::Url{"http://api.plos.org/search?q=title:DNA"}); std::cout << r.status_code << std::endl; return 0; }
内容的提问来源于stack exchange,提问作者ROgercad
相关产品推荐
相关产品推荐

