C++使用JSONCPP编写JSON



我试图使用JSONCPP库来处理C++中的JSON文档。阅读这里的另一个问题,我看到了这个例子并尝试实现:

#include "json/json.h"
int main(){
Json::Value event;
Json::Value vec(Json::arrayValue);
vec.append(Json::Value(1));
vec.append(Json::Value(2));
vec.append(Json::Value(3));
event["competitors"]["home"]["name"] = "Liverpool";
event["competitors"]["away"]["code"] = 89223;
event["competitors"]["away"]["name"] = "Aston Villa";
event["competitors"]["away"]["code"] = vec;
std::cout << event << std::endl;
}

但我一直收到这个错误:

json2.cpp:(.text+0x1c): referência não definida para "Json::Value::Value(Json::ValueType)"
/usr/bin/ld: json2.cpp:(.text+0x30): referência não definida para "Json::Value::Value(Json::ValueType)"

json2.cpp是该文件的名称,就像它看起来一样。由于/usr/bin/ld-a链接错误,我试图将目录路径作为参数添加到编译命令中,但错误仍然存在

有人知道怎么修吗?

这一切都与如何构建/安装库以及在源代码中指定头有关。由于您没有提到构建库的方法,我将展示我在Ubuntu 20.04 LTS上使用的三种解决方案。

安装程序包

最简单的方法是通过apt:安装

$ sudo apt-get install libjsoncpp-dev

头文件将安装到/usr/include/jsoncpp/json中,并可以包含在json2.cpp中作为:

#include <jsoncpp/json/json.h>

并通过添加链接器标志编译为:

$ g++ json2.cpp -o json2 -ljsoncpp

合并源

在jsoncpp存储库的顶级目录中,您可以通过以下方式合并源:

$ python amalgamate.py

默认情况下,这将在dist/目录中生成所有必要的源文件和头文件,并且不需要链接库。在json2.cpp中包含为:

#include <json/json.h>

如构建说明所示,jsoncpp.cpp必须被纳入您的项目:

$ g++ json2.cpp dist/jsoncpp.cpp -Idist -o json2

Cmake

来自jsoncpp存储库的顶级目录:

$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=release -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" ..
$ make; make install

这将把头文件安装到/usr/local/include/json中。在json2.cpp中包含为:

#include <json/json.h>

并通过添加链接器标志编译为:

$ g++ json2.cpp -o json2 -ljsoncpp

最新更新