2012-03-30 14 views
5

mam ściśle przestrzegane tę dokumentację do zainstalowania i używania biblioteki jsoncpp w moim projekcie: jsoncpp READMEJak korzystać z JSON-CPP?

Ale nadal mam ten problem z moim kompilacji:

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.

Jest to zdarzyć, gdy próbuję użyć #include <json/json.h>

Oto mój 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 

Dzięki dla ciebie pomoc.

+0

Sekcja "Budowanie/testowanie" (z README, z którą łączyłeś się) instruuje cię, abyś użył 'python scons.py platform = twoja-platforma-tutaj' do zbudowania biblioteki, ale pokazujesz' Makefile' . Czy skrypt budujący, który opublikowałeś dla swojej aplikacji, czy dla biblioteki 'jsoncpp'? –

Odpowiedz

3

Podajesz katalog zawarty dla jsoncpp w swojej zmiennej LDFLAGS, ale nie są one używane, dopóki nie skompilujesz już indywidualnych plików cpp. Musisz umieścić gdzieś w flagach część -I src/jsoncpp-src-0.5.0/include, która zostanie dodana do linii kompilacji, na przykład CXXFLAGS.

Aby rozwinąć nieco, używasz niejawnego Utwórz reguły do ​​budowania indywidualnych plików .cpp, a następnie masz określony cel do budowania aplikacji z tych obiektów.

Zobacz GNU Make Catalog of Rules uzyskać więcej informacji, ale jeden używasz jest tutaj:

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: teraz za swoimi błędami łączących.

Otrzymujesz te problemy, ponieważ linker nie może znaleźć rzeczywistych implementacji funkcji, do których dzwonisz.

Po pierwsze, Twoja dyrektywa -L musi wskazywać na folder, a nie bibliotekę. -L ustawia ścieżkę wyszukiwania dla bibliotek. Powinien być ustawiony na folder, w którym biblioteka została utworzona kompilacja jsoncpp. Następnie musisz połączyć samą bibliotekę. Ta nazwa biblioteki jest gigantyczna, ale dodanie -l json_linux-gcc-4.5.1_libmt do LDFLAGS powinno załatwić sprawę. -l (to niższy ell) ustawia rzeczywistą bibliotekę do połączenia.

+0

Cześć, Andre, używam skryptu scons.py do budowania z 'CHECK' target i wszystko jest w porządku z budowaniem + testowaniem. To mój własny MAKEFILE. –

+0

Witam Collin, umieściłem -I linie w moim CXXFLAGS i tutaj jest somes nowe błędy, które dostaję: ' ./src/ModConnection.o: W funkcji' main ': ModConnection.cpp :(. Text + 0x16): niezdefiniowane odniesienie do 'Json :: Wartość :: Wartość (Json :: ValueType) ' ' –

+0

Teraz nie mam błędu z moją kompilacją, ponieważ postępuję zgodnie z radami Collins Hockey, Ale kiedy " m piszę to w moim głównym programie: 'Json :: Value root;' Zawsze otrzymuję ten błąd: 'ModConnection.cpp :(. text + 0x16): niezdefiniowane odniesienie do' Json :: Value :: Value (Json :: ValueType) ' ModConnection.cpp :(. Text + 0x27): niezdefiniowane odniesienie do 'Json :: Value :: ~ Value()'' –