我严格遵循此文档在我的项目中安装和使用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
谢谢你的帮助。
答案 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
(低于此值)设置要链接的实际库。