我正在尝试在我的C ++代码中实现jsoncpp库,我编写了一段简单的代码来试试它,它甚至都没有编译。
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#ifndef json_included
#define json_included
#include "jsoncpp\include\json\json.h"
#endif
//#include "json\jsonC\json.h"
int main(int argc, char **argv)
{
std::string example = "{\"array\":[\"item1\", \"item2\"], \"not an array\":\"asdf\"}";
Json::Value value;
Json::Reader reader;
bool parsed = reader.parse(example, value, false);
std::cout << parsed;
return 0;
}
我得到的错误是:
undefined reference to `Json::Reader::parse(std::string const&, Json::Value&, bool)'
undefined reference to `Json::Reader::Reader()'
undefined reference to `Json::Value::~Value()'
undefined reference to `Json::Value::Value(Json::ValueType)'
我对C ++有点新意,是否在include语句中缺少某些东西?或者jsonCpp需要额外的东西吗?
感谢您的时间!
答案 0 :(得分:5)
您的代码正在编译,但它没有链接。您忘记将JSON共享库文件提供给链接器(或者,在较新版本中,将合并的jsoncpp.cpp添加到项目中)。
如果不了解您的开发环境,很难给出更具体的说明。
顺便说一下,你在写C ++;请使用cstdio
之类的C ++标题,而不是stdio.h
。您也未能包含C ++ string
,并且很幸运它通过一些JSON标题“工作”,包括它。
答案 1 :(得分:2)
“未定义的引用”听起来像链接器问题。 jsoncpp是否附带了您需要链接的库,例如.so,.a,.lib或.dll文件?
根据jsoncpp README,必须首先使用scons
构建库。据推测,这将输出一个库文件,如.so,.a,.lib或.dll文件。然后,您必须遵循编译器的规则来链接此类库(例如,在编译时将其添加到命令行的末尾,或将其添加到IDE中项目配置中的“其他库”字段中)。
答案 2 :(得分:1)
在我的情况下(在Ubuntu上使用CodeBlocks IDE)问题是我需要将Point point = new Point(1,1);
point.getX();
point.getY();
项目中的json.cpp文件(generated和python amalgamate.py
)添加到我的建立目标。
换句话说,我在jsoncpp
编译语句中添加了-c jsoncpp.cpp
选项。
答案 3 :(得分:0)
您需要链接到json库,例如使用-ljson_linux-gcc-4.4.3_libmt
您可以通过查看库目录找到确切的库名称,例如/ usr / lib中
如果您使用的是Visual Studio,请将.lib文件添加到Project Properties,Linker,Input,Additional Dependencies并在Project Properties,Linker,General,Additional Library Directories中指定路径
答案 4 :(得分:0)
两个潜在问题:
在某些版本的jsoncpp库代码中存在一个错误,其中合并需要合并以使链接正常工作。
正如其他答案所示,#include
答案 5 :(得分:0)
编译jsoncpp后,您可以在libs /文件夹中找到这些库。为方便起见,您可以将它放在/ usr / lib中,然后通过将-llibjson_linux-gcc-4.4.3_libmt作为参数传递给g ++来在运行时链接它。
我已将libjson_linux-gcc-4.4.3_libmt.so重命名为libjson.so,并可通过指定-ljson链接它。