Проблемы, включая заголовки jsonCpp - PullRequest
3 голосов
/ 03 марта 2011

Я пытаюсь реализовать библиотеки jsoncpp в своем коде C ++, я написал простой кусок кода, чтобы просто попробовать его, и он даже не компилируется.

#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 ++, есть что-то, что я упускаю в операторе включения?Или jsonCpp нужно что-то дополнительное?

Спасибо за потраченное время!

Ответы [ 6 ]

5 голосов
/ 03 марта 2011

Ваш код компилируется, но не связывается. Вы забыли предоставить файлы компоновки общей библиотеки JSON своему компоновщику (или в более новых версиях добавить объединенный файл jsoncpp.cpp в ваш проект).

Не зная больше о вашей среде разработки, трудно дать вам более конкретные инструкции.

Кстати, вы пишете C ++; используйте заголовки C ++, например cstdio, а не stdio.h, пожалуйста. Вам также не удалось включить C ++ string, и вам повезло, что он «работал» через какой-то заголовок JSON, включая его для вас.

2 голосов
/ 03 марта 2011

«Неопределенная ссылка» звучит как проблема linker . Приходит ли jsoncpp с библиотекой, с которой вам нужно связаться, такой как файл .so, .a, .lib или .dll?

Согласно jsoncpp README , библиотека должна быть сначала построена с использованием scons. Предположительно, после этого будет выведен файл библиотеки, такой как .so, .a, .lib или .dll. Затем вы должны следовать правилу вашего компилятора для связи с такой библиотекой (например, добавить его в конец командной строки при компиляции или добавить его в поле «дополнительные библиотеки» в конфигурации проекта в вашей IDE).

1 голос
/ 29 декабря 2015

В моем случае (с использованием IDE CodeBlocks в Ubuntu) проблема заключалась в том, что мне нужно было добавить файл json.cpp ( сгенерированный с python amalgamate.py из проекта jsoncpp) в мои цели сборки.

Другими словами, я добавил опцию -c jsoncpp.cpp в свой оператор компиляции g++.

0 голосов
/ 21 августа 2012

После компиляции jsoncpp вы можете найти библиотеки в папке libs /.Для удобства вы можете поместить его в / usr / lib, а затем связать его во время выполнения, передав -llibjson_linux-gcc-4.4.3_libmt в качестве аргумента g ++.

Я переименовал libjson_linux-gcc-4.4.3_libmt.so к libjson.so и можете связать его, указав -ljson.

0 голосов
/ 01 августа 2012

Две потенциальные проблемы:

  • В некоторых версиях кода библиотеки jsoncpp есть ошибка, из-за которой объединенное соединение должно стать объединением, чтобы ссылки работали правильно.

  • Как и предполагали другие ответы, #include

0 голосов
/ 03 марта 2011

Вам необходимо связаться с библиотеками json, например, используя -ljson_linux-gcc-4.4.3_libmt

Точное имя библиотеки можно найти, заглянув в каталог библиотеки, например, / USR / Lib

Если вы используете Visual Studio, добавьте файл .lib в Свойства проекта, Компоновщик, Ввод, Дополнительные зависимости и укажите путь в Свойствах проекта, Компоновщик, Общие, Дополнительные каталоги библиотек

...