2012-03-30 20 views
5

Ich habe strikt befolgt diese Dokumentation zu installieren und jsoncpp Bibliothek in meinem Projekt zu verwenden: jsoncpp READMEWie verwende ich JSON-CPP?

Aber ich habe immer noch das Problem mit meiner Sammlung:

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.

Es ist passiert, wenn ich versuche zu verwenden #include <json/json.h>

Hier ist mein Linux MAKE:

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 

Dank für dich helfen.

+0

Der Abschnitt "Building/Testing" (aus der README, mit dem Sie verlinkt sind) weist Sie an, die 'python scons.py platform = Ihre Plattform-here' zu ​​verwenden, um die Bibliothek zu erstellen, aber Sie zeigen ein' Makefile' . Ist das Build-Skript, das Sie für Ihre Anwendung oder für die 'jsoncpp'-Bibliothek veröffentlicht haben? –

Antwort

3

Sie geben das Include-Verzeichnis für jsoncpp in Ihrer LDFLAGS -Variable an. Diese Variablen werden jedoch erst verwendet, nachdem Sie die einzelnen cpp-Dateien kompiliert haben. Sie müssen den Teil -I src/jsoncpp-src-0.5.0/include irgendwo in die Flags setzen, die zu den Kompilierungszeilen hinzugefügt werden, z. B. CXXFLAGS.

Um ein wenig zu erweitern, verwenden Sie implizite Make-Regeln, um Ihre individuellen .cpp Dateien zu erstellen, dann haben Sie ein spezifisches Ziel zum Erstellen Ihrer Anwendung aus diesen Objekten.

Siehe GNU Make Catalog of Rules für weitere Informationen, aber die eine Sie ist hier mit: Ihre Verknüpfung Fehler Jetzt:

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’.

bearbeiten.

Sie erhalten diese Probleme, weil der Linker die tatsächlichen Implementierungen der Funktionen nicht finden kann, die Sie aufrufen.

Zuerst muss Ihre Anweisung -L auf einen Ordner verweisen, nicht auf eine Bibliothek. -L legt einen Suchpfad für Bibliotheken fest. Es sollte auf den Ordner festgelegt werden, in dem die Bibliothek jsoncpp build erstellt wurde. Als Nächstes müssen Sie die Bibliothek selbst verknüpfen. Dieser Bibliotheksname ist gigantisch, aber -l json_linux-gcc-4.5.1_libmt zu LDFLAGS sollte den Trick tun. -l (das ist die untere Elle) legt eine aktuelle Bibliothek zum Verknüpfen fest.

+0

Hallo Andre, ich habe das Skript scons.py verwendet, um mit dem Ziel 'CHECK' zu bauen, und alles ist in Ordnung mit dem Bauen + Testen. Es ist mein eigenes MAKEFILE. –

+0

Hallo Collin, ich habe die -I Zeilen in meine CXXFLAGS geschrieben und hier sind einige neue Fehler die ich bekomme: ' ./src/ModConnection.o: In der Funktion' main ': ModConnection.cpp :(. Text + 0x16): undefinierter Verweis auf 'Json :: Value :: Value (Json :: ValueType) ' ' –

+0

Nun habe ich keinen Fehler bei meiner Kompilation, da ich den Ratschlägen von Collins Hockey gefolgt bin, aber wenn ich' m schreibe dies in meinem Hauptprogramm: 'Json :: Value root;' Ich bekomme immer diesen Fehler: 'ModConnection.cpp :(. Text + 0x16): undefinierter Verweis auf' Json :: Value :: Value (Json :: ValueType) ' ModConnection.cpp :(. Text + 0x27): undefinierter Verweis auf 'Json :: Value :: ~ Value()'' –