Как использовать JSON-CPP? - PullRequest
5 голосов
/ 30 марта 2012

Я строго следовал этой документации для установки и использования библиотеки jsoncpp в моем проекте: jsoncpp README

Но у меня все еще есть проблема с моей компиляцией:

g ++ -W -Wall -Werror -c -o src / ModConnection.o src / ModConnection.cpp src / ModConnection.cpp: 15: 23: фатальная ошибка: json / json.h: нет такого файла или каталога компиляция прекращена.

Это случается, когда я пытаюсь использовать #include <json/json.h>

Вот мой Linux MAKEFILE:

CXX     =       g++
NAME    =       bin/server
SRCS    =       ./src/ModConnection.cpp\
                ./src/unixNetwork.cpp
OBJS    =       $(SRCS:.cpp=.o)
CXXFLAGS +=     -W -Wall -Werror
LDFLAGS =       -L ./src/jsoncpp-src-0.5.0/buildscons/linux-gcc4.5.1/src/lib_json/libjson_linux-gcc-4.5.1_libmt.a -I src/jsoncpp-src-0.5.0/include
RM      =       rm -f
$(NAME) :       $(OBJS)
$(CXX) $(LDFLAGS) -o $(NAME) $(OBJS)

all     :       $(NAME)

clean   :
                $(RM) $(OBJS)

fclean  :       clean
                $(RM) $(NAME)

re      :       fclean all

.PHONY  :       all clean fclean re

Спасибо за помощь.

1 Ответ

3 голосов
/ 30 марта 2012

Вы указываете каталог включения для jsoncpp в своей переменной LDFLAGS, но они не используются, пока вы уже не скомпилировали отдельные файлы cpp. Вам нужно поместить деталь -I src/jsoncpp-src-0.5.0/include где-нибудь во флаги, которые добавляются в строки компиляции, такие как CXXFLAGS.

Чтобы немного расширить, вы используете неявные правила Make для создания ваших отдельных .cpp файлов, тогда у вас есть конкретная цель для построения приложения из этих объектов.

См. GNU Make Каталог правил для получения дополнительной информации, но тот, который вы используете, находится здесь:

Компиляция программ на C ++ n.o производится автоматически из n.cc, n.cpp или n.C с рецептом вида $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c. Мы рекомендуем вам использовать суффикс ".cc" для исходных файлов C ++ вместо ".C".

Редактировать : Теперь ваши ошибки связывания.

Вы получаете эти проблемы, потому что компоновщик не может найти фактические реализации функций, которые вы вызываете.

Во-первых, ваша директива -L должна указывать на папку, а не на библиотеку. -L устанавливает путь поиска для библиотек. Следует указать папку, в которой была создана библиотека для сборки jsoncpp. Далее необходимо связать саму библиотеку. Это имя библиотеки гигантское, но добавление -l json_linux-gcc-4.5.1_libmt к LDFLAGS должно помочь. -l (это нижний предел) устанавливает фактическую библиотеку для связи.

...