2012-03-30 10 views
5

Ho seguito rigorosamente questa documentazione da installare e da usare biblioteca jsoncpp nel mio progetto: jsoncpp READMECome utilizzare JSON-CPP?

Ma ho ancora questo problema con il mio compilazione:

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.

E 'accadere quando sto cercando di usare #include <json/json.h>

Ecco il mio 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 

Grazie per il tuo aiuto

+0

La sezione "Building/Testing" (dal README a cui si è collegati) indica di usare la 'python scons.py platform = your-platform-here' per costruire la libreria, ma si sta visualizzando un' Makefile' . Lo script di build che hai postato per la tua applicazione, o per la libreria 'jsoncpp'? –

risposta

3

Si sta specificando la directory di inclusione per jsoncpp nella variabile LDFLAGS, ma questi non vengono utilizzati fino a quando non si sono già compilati i singoli file cpp. È necessario inserire la parte -I src/jsoncpp-src-0.5.0/include da qualche parte nelle bandiere che vengono aggiunte alle linee di compilazione, ad esempio CXXFLAGS.

Per espandere un po ', si stanno utilizzando le regole di creazione implicite per creare i singoli file .cpp, quindi si dispone di un obiettivo specifico per creare l'applicazione da tali oggetti.

Vedere la GNU Make Catalog of Rules per maggiori informazioni, ma quello che si sta utilizzando è qui:

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: Ora per i vostri errori di collegamento.

Stai riscontrando questi problemi perché il linker non riesce a trovare le implementazioni effettive delle funzioni che stai chiamando.

In primo luogo, la direttiva -L deve puntare a una cartella, non a una libreria. -L imposta un percorso di ricerca per le librerie. Dovrebbe essere impostato sulla cartella in cui è stata creata la build jsoncpp. Successivamente, è necessario collegare la libreria stessa. Quel nome di libreria è gigantesco, ma aggiungere -l json_linux-gcc-4.5.1_libmt a LDFLAGS dovrebbe fare il trucco. -l (quello è inferiore ell) imposta una libreria reale da collegare.

+0

Ciao Andre, ho usato lo script scons.py per costruire con l'obiettivo 'CHECK' e tutto è a posto con la costruzione + testing. È il mio vero MAKEFILE. –

+0

Ciao Collin, ho messo le linee -I nella mia CXXFLAGS e qui sono somi nuovi errori che ottengo: ' ./src/ModConnection.o: In funzione' main ': ModConnection.cpp :(. Testo + 0x16): riferimento non definito a 'Json :: Value :: Value (Json :: ValueType) ' ' –

+0

Ora, non ho errori con la mia compilation da quando ho seguito i consigli di Collins Hockey, ma quando I' m scrivendo questo nel mio programma principale: 'Json :: Value root;' Ricevo sempre questo errore: 'ModConnection.cpp :(. text + 0x16): riferimento non definito a' Json :: Value :: Value (Json :: ValueType) ' ModConnection.cpp :(. Testo + 0x27): riferimento non definito a 'Json :: Value :: ~ Value()'' –