如何使用JSON-CPP?

时间:2012-03-30 17:59:07

标签: c++ json jsoncpp

我严格遵循此文档在我的项目中安装和使用jsoncpp库:jsoncpp README

但我的编译仍然存在这个问题:

  

g ++ -W -Wall -Werror -c -o src / ModConnection.o src / ModConnection.cpp   src / ModConnection.cpp:15:23:致命错误:json / json.h:没有这样的文件或目录   编译终止。

当我尝试使用#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

谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

您在LDFLAGS变量中指定了jsoncpp的include目录,但在您编译了各个cpp文件之前,这些目录不会被使用。您需要将部分-I src/jsoncpp-src-0.5.0/include放在标记中的某些位置,这些标记将添加到编译行中,例如CXXFLAGS

要扩展一点,您使用隐式Make规则来构建单个.cpp文件,然后您有一个特定的目标,用于从这些对象构建应用程序。

有关详细信息,请参阅GNU Make Catalog of Rules,但您正在使用的是:

  

编译C ++程序   n.o是从n.cc,n.cpp或n.C自动生成的,其形式为$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c。我们建议您对C ++源文件使用后缀“.cc”而不是“.C”。

修改:现在是您的链接错误。

您遇到了这些问题,因为链接器无法找到您正在调用的函数的实际实现。

首先,您的-L指令需要指向文件夹,而不是库。 -L设置库的搜索路径。它应该设置为创建jsoncpp构建库的文件夹。接下来,您必须链接库本身。该库名称很大,但将-l json_linux-gcc-4.5.1_libmt添加到LDFLAGS应该可以解决问题。 -l(低于此值)设置要链接的实际库。