6

我严格按照本文档在我的项目中安装和使用 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

谢谢你的帮助。

4

1 回答 1

3

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

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

有关更多信息,请参阅GNU Make 规则目录,但您正在使用的是这里:

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

编辑:现在为您的链接错误。

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

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

于 2012-03-30T18:25:57.623 回答