c++ - 如何使用 JSON-CPP?

标签 c++ json jsoncpp

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

相关文章:

ios - JSONKIT 解析错误

json - 快速查看 JSONEncode() 输出的优雅方式

c++ - 如何修复来自 getMemberNames() 的 JsonCPP 错误?

c++ - 如何将jsoncpp库包含到UNIX项目中?

c++ - boost::hash_combine 中的魔数(Magic Number)

c++ - 关闭所有 QWidget 后 QApplication 不退出

c++ - 使用二进制模式将数据结构写入文件

C++将文件的所有字节放入char数组?

json - 为什么我的 jq/read/echo 管道会删除反斜杠?

c++ - jsoncpp格式化问题