包含 jsoncpp 库时出错

Error while including the jsoncpp lib

我正在尝试用 C++ 解析 JSON。我的 Makefile 如下所示:

LDFLAGS = -L/home/ting/Temp/code/jsoncpp/libs/linux-gcc-5.4.0/ ./jsoncpp/libs/linux-gcc-5.4.0/libjson.a ./jsoncpp/libs/linux-gcc-5.4.0/libjson.so
INC = -I/home/ting/Temp/code/jsoncpp/include/json

CC=g++
CFLAGS = -std=c++11


main: main.cpp
    $(CC) -o $@ $(LDFLAGS) $(INC) $^ ${CFLAGS}

当我简单地 #include "json.h" 时,编译器会给我一堆错误。我刚选了其中的一些:

/usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h:44:19: error: 
missing binary operator before token "("
 #if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE)
               ^
In file included from /usr/include/c++/5/cwchar:44:0,
             from /usr/include/c++/5/bits/postypes.h:40,
             from /usr/include/c++/5/iosfwd:40,
             from /usr/include/c++/5/ios:38,
             from /usr/include/c++/5/istream:38,
             from /usr/include/c++/5/fstream:38,
             from main.cpp:1:
/usr/include/wchar.h:74:43: error: missing binary operator before token "("

看起来库没有任何错误。但是只有当我 link 到 jsoncpp 库并将其包含目录添加到 Makefile 时才会出现此问题。

我很困惑;发生什么事了?

您的 jsoncpp 包含必须是这样的:

#include <json/json.h>

并且您的包含路径必须以 include 目录结束,这样:

INC = -I/home/ting/Temp/code/jsoncpp/include

如果您从包含中省略 json 目录,并将其添加到您的 INC 变量中,编译器将最终选择 features.h header 来自 json 目录,而不是 glibc[ 所需的 features.h =24=],这会产生类似于您发布的错误(请注意,glibc 中的 features.h 定义了 __GLIBC_PREREQ 宏)。