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 和 link 错误,我尝试将目录路径作为参数添加到编译命令,但错误仍然存在
有人知道怎么解决吗?
一切都是关于如何 build/install 库并在源代码中指定 header 的。既然你没有提到你用什么方法来构建库,我将展示我在 Ubuntu 20.04 LTS 上工作的三个解决方案。
安装包
最直接的方法是通过 apt 安装:
$ sudo apt-get install libjsoncpp-dev
header 文件将安装到 /usr /include/jsoncpp/json 并且可以包含在 json2.cpp 中,如:
#include <jsoncpp/json/json.h>
并通过添加 linker 标志进行编译:
$ g++ json2.cpp -o json2 -ljsoncpp
合并源
在jsoncpp仓库的top-level目录下,可以通过以下方式合并源:
$ python amalgamate.py
默认情况下,这将在 dist/ 目录中生成所有必需的源文件和 header 文件,不需要 link 库。在 json2.cpp 中包含为:
#include <json/json.h>
如构建说明中所述,jsoncpp.cpp 必须合并到您的项目中:
$ g++ json2.cpp dist/jsoncpp.cpp -Idist -o json2
Cmake
来自 jsoncpp 存储库的 top-level 目录:
$ 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
这会将 header 个文件安装到 /usr/local/include/json。在 json2.cpp 中包含为:
#include <json/json.h>
并通过添加 linker 标志进行编译:
$ g++ json2.cpp -o json2 -ljsoncpp
我试图使用 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 和 link 错误,我尝试将目录路径作为参数添加到编译命令,但错误仍然存在
有人知道怎么解决吗?
一切都是关于如何 build/install 库并在源代码中指定 header 的。既然你没有提到你用什么方法来构建库,我将展示我在 Ubuntu 20.04 LTS 上工作的三个解决方案。
安装包
最直接的方法是通过 apt 安装:
$ sudo apt-get install libjsoncpp-dev
header 文件将安装到 /usr /include/jsoncpp/json 并且可以包含在 json2.cpp 中,如:
#include <jsoncpp/json/json.h>
并通过添加 linker 标志进行编译:
$ g++ json2.cpp -o json2 -ljsoncpp
合并源
在jsoncpp仓库的top-level目录下,可以通过以下方式合并源:
$ python amalgamate.py
默认情况下,这将在 dist/ 目录中生成所有必需的源文件和 header 文件,不需要 link 库。在 json2.cpp 中包含为:
#include <json/json.h>
如构建说明中所述,jsoncpp.cpp 必须合并到您的项目中:
$ g++ json2.cpp dist/jsoncpp.cpp -Idist -o json2
Cmake
来自 jsoncpp 存储库的 top-level 目录:
$ 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
这会将 header 个文件安装到 /usr/local/include/json。在 json2.cpp 中包含为:
#include <json/json.h>
并通过添加 linker 标志进行编译:
$ g++ json2.cpp -o json2 -ljsoncpp