繁体   English   中英

C++ 用 JSONCPP 编写 JSON

[英]C++ writing JSON with JSONCPP

我试图使用 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 链接错误,我尝试将目录路径添加为编译命令的参数,但错误仍然存​​在

有谁知道如何修理它?

这完全取决于您如何构建/安装库并在源代码中指定头文件。 由于您没有提到构建库所采用的方法,我将演示我在 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

制作

从 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM