我严格遵循此文档在我的项目中安装和使用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
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
您在变量中指定 jsoncpp 的包含目录LDFLAGS,但在您编译各个 cpp 文件之前,这些目录不会被使用。您需要将该部分放在-I src/jsoncpp-src-0.5.0/include添加到编译行的标志中的某个位置,例如CXXFLAGS.
为了扩展一点,您使用隐式 Make 规则来构建各个.cpp文件,然后您就有了从这些对象构建应用程序的特定目标。
有关详细信息,请参阅GNU Make 规则目录,但您正在使用的规则位于此处:
\n\n\n\n\n编译 C++ 程序\n no 是从 n.cc、n.cpp 或 nC 自动生成的,配方形式为
\n$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c。我们鼓励您对 C++ 源文件使用后缀 \xe2\x80\x98.cc\xe2\x80\x99,而不是 \xe2\x80\x98.C\xe2\x80\x99。
编辑:现在针对您的链接错误。
\n\n您遇到这些问题是因为链接器无法找到您正在调用的函数的实际实现。
\n\n首先,您的-L指令需要指向一个文件夹,而不是一个库。-L设置库的搜索路径。应将其设置为创建 jsoncpp 构建的库的文件夹。接下来,您必须链接库本身。该库名称很大,但添加-l json_linux-gcc-4.5.1_libmt应该LDFLAGS可以解决问题。-l(这就是下面的内容)设置要链接的实际库。
| 归档时间: |
|
| 查看次数: |
15354 次 |
| 最近记录: |