You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译JsonCpp解析URL代码时遇头文件及C++版本错误求助

解决libcurl+jsoncpp编译时的头文件与C++标准问题

看起来你在编译结合libcurl和jsoncpp的代码时碰到了两个典型的编译障碍,我来一步步帮你搞定:

1. 头文件找不到的问题

你一开始遇到的fatal error: json/json.h: No such file or directory,是因为服务器上jsoncpp的头文件安装路径和常规路径不一致。解决这个问题有两种思路:

方法一:修改编译命令,指定头文件搜索目录

不用改动代码里的#include <json/json.h>,而是在编译时用-I参数告诉编译器去哪里找这个头文件。先通过下面的命令确认jsoncpp头文件的实际位置:

find /usr/include -name "json.h"

假设输出是/usr/include/jsoncpp/json/json.h,说明头文件的根目录是/usr/include/jsoncpp,那编译命令就改成:

g++ main.cpp -I/usr/include/jsoncpp -ljsoncpp -lcurl -o example.out

这样编译器就能顺利找到<json/json.h>了。

方法二:修改代码中的头文件路径

如果你已经把代码里的头文件改成了#include <jsoncpp/json/json.h>,只要编译器能搜索到这个路径也能解决问题,但这种方式会降低代码的可移植性,更推荐用方法一。

2. C++标准版本不兼容的问题

改完头文件后出现的#error This file requires compiler and library support for the ISO C++ 2011 standard...(完整错误信息),是因为你的编译器默认使用老旧的C98标准,而jsoncpp依赖C11及以上的特性。

解决这个问题很简单,在编译命令里加上-std=c++11即可(gcc 5已经支持C++11,也可以用更高版本如-std=c++14、-std=c++17)。

结合头文件的解决方法,最终完整的编译命令应该是:

g++ main.cpp -std=c++11 -I/usr/include/jsoncpp -ljsoncpp -lcurl -o example.out

如果是用修改头文件路径的方式,命令就是:

g++ main.cpp -std=c++11 -ljsoncpp -lcurl -o example.out

额外验证

你可以先单独验证jsoncpp的编译环境是否正常,比如写一段简单的测试代码:

#include <json/json.h>
#include <iostream>

int main() {
    Json::Value root;
    root["test"] = "hello";
    std::cout << root.toStyledString() << std::endl;
    return 0;
}

用上面的编译命令编译运行,如果能正常输出格式化的JSON字符串,说明jsoncpp环境没问题,再结合libcurl的代码一起编译就不会有问题了。

内容的提问来源于stack exchange,提问作者Ehsan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:03:09