2012-03-30 17 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

「Building/Testing」部分(來自您鏈接的自述文件)指示您使用'python scons.py platform = your-platform-here'來構建庫,但是您顯示的是'Makefile' 。您爲應用程序發佈的構建腳本,還是針對'jsoncpp'庫? – 2012-03-30 18:09:01

回答

3

您正在爲LDFLAGS變量指定jsoncpp的include目錄,但只有在編譯完個別cpp文件後才能使用它們。您需要將部分-I src/jsoncpp-src-0.5.0/include放在標記中,並將其添加到編譯行中,例如CXXFLAGS。爲了擴大一點,你使用隱式的Make規則來構建你自己的文件,然後你有一個特定的目標,用來從你的應用程序中構建你的應用程序。

更多信息,請參見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’.

編輯:現在你的鏈接錯誤。

你會遇到這些問題,因爲鏈接器找不到你要調用的函數的實際實現。

首先,您的-L指令需要指向一個文件夾,而不是一個庫。 -L設置庫的搜索路徑。它應該設置爲創建jsoncpp構建庫的文件夾。接下來,您必須鏈接庫本身。這個庫的名字是巨大的,但加入-l json_linux-gcc-4.5.1_libmtLDFLAGS應該做的伎倆。 -l(這是更低的ell)設置一個實際的庫鏈接。

+0

嗨,安德烈,我已經使用scons.py腳本來構建'CHECK'目標,並且所有的都可以通過構建+測試來完成。這是我自己的MAKEFILE。 – 2012-03-30 18:29:52

+0

嗨科林,我把我的CXXFLAGS -I線,這裏是我得到的一些新的錯誤:' ./src/ModConnection.o:在函數'主要': ModConnection.cpp :(。文本+ (Json :: ValueType)' ' – 2012-03-30 18:34:18

+0

現在,我沒有錯誤,因爲我遵循了Collins Hockey的建議, m在我的主程序中寫道:'Json :: Value root;'我總是得到這個錯誤:'ModConnection.cpp :(。text + 0x16):對Json :: Value :: Value的未定義引用(Json :: ValueType )' ModConnection.cpp :(。text + 0x27):未定義的引用'Json :: Value ::〜Value()'' – 2012-03-30 18:49:03