2012-03-30 2 views
5

я строго следовал этой документации, чтобы установить и использовать библиотеку jsoncpp в моем проекте: jsoncpp READMEКак использовать JSON-CPP?

Но я до сих пор есть эта проблема с моей компиляции:

g++ -W -Wall -Werror -c -o src/ModConnection.o src/ModConnection.cpp src/ModConnection.cpp:15:23: fatal error: json/json.h: No such file or directory compilation terminated.

Это случилось, когда я пытаюсь использовать #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 

Спасибо за вас.

+0

Раздел «Строительство/Тестирование» (из README, с которым вы связались) предлагает вам использовать 'python scons.py platform = your-platform-here' для сборки библиотеки, но вы показываете' Makefile' , Является ли скрипт сборки для вашего приложения или для библиотеки 'jsoncpp'? –

ответ

3

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

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

Смотрите GNU Make Catalog of Rules для получения дополнительной информации, но один вы используете здесь:

Compiling C++ programs n.o is made automatically from n.cc, n.cpp, or n.C with a recipe of the form $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c . We encourage you to use the suffix ‘.cc’ for C++ source files instead of ‘.C’.

Edit: Теперь для ссылающихся ошибок.

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

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

+0

Привет, Андре, я использую скрипт scons.py для сборки с целью «ПРОВЕРИТЬ», и все в порядке со зданием + тестирование. Это моя собственная MAKEFILE. –

+0

Привет, Коллин, я положил строки -I в мои CXXFLAGS, и вот некоторые из новых ошибок, которые я получаю: ' ./src/ModConnection.o: В функции' main ': ModConnection.cpp :(. Text + 0x16): неопределенная ссылка на 'Json :: Value :: Value (Json :: ValueType) ' ' –

+0

Теперь у меня нет ошибок с моей компиляцией, поскольку я следовал советам Collins Hockey, m: Написал это в моей основной программе: 'Json :: Value root;' Я всегда получаю эту ошибку: 'ModConnection.cpp :(. text + 0x16): неопределенная ссылка на' Json :: Value :: Value (Json :: ValueType) ' ModConnection.cpp :(. Text + 0x27): неопределенная ссылка на 'Json :: Value :: ~ Value()'' –

Смежные вопросы