我严格按照此文档在我的项目中安装和使用 jsoncpp 库:jsoncpp README
但是我的编译还是有这个问题:
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
谢谢你的帮助。
最佳答案
您在 LDFLAGS
变量中指定了 jsoncpp 的包含目录,但是在您已经编译了各个 cpp 文件之前不会使用这些目录。您需要将 -I src/jsoncpp-src-0.5.0/include
部分放在添加到编译行的标志中的某个位置,例如 CXXFLAGS
。
扩展一点,您使用隐式 Make 规则来构建您的个人 .cpp
文件,然后您有一个特定的目标来从这些对象构建您的应用程序。
参见 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_libmt
添加到 LDFLAGS
应该可以解决问题。 -l
(较低的 ell)设置要链接的实际库。
关于c++ - 如何使用 JSON-CPP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9948125/