【问题标题】:Error while including the jsoncpp lib包含 jsoncpp 库时出错
【发布时间】:2017-11-06 15:10:13
【问题描述】:

我正在尝试使用 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 "("

看起来库没有任何错误。但这个问题只有在我链接到jsoncpp lib 并将其包含目录添加到 Makefile 时才会出现。

我很困惑;发生了什么?

【问题讨论】:

  • 如果您需要有关代码的帮助,请发布。据我们所知,您并没有关闭某个名称空间,也没有关闭任何其他数量的语法错误,这些错误可能会级联到您发布的看似毫无意义的错误片段。
  • 一般来说,选择“一些”错误并没有多大用处,因为很多错误可能会导致代码中看似不相关的部分出现其他错误。相反,您应该选择 first 错误,它更有可能成为真正的原因。
  • @underscore_d 嗨。代码很简单。我刚刚包括了标题。 #包括“json.h”。然后我有几页错误。这也是我说“一些错误”的原因,因为我不明白 GCC 想说什么。
  • @DanielH 你好。我发布的实际上是第一个错误,因为我在页面上出现错误,我无法理解 GCC 想说什么。所以我选择了“一些”这个词
  • 旁注:#include 系统标头带有<brackets>,而不是"quotes" 更习惯用法。这至少使您的意图更清晰,更容易区分本地与系统标头,并且还可以更改搜索顺序(尽管我认为这不是精确定义的)。

标签: c++ makefile jsoncpp


【解决方案1】:

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

#include <json/json.h>

你的包含路径必须在 include 目录结束,这样:

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

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

【讨论】:

  • 嗨。我的包含 pach 实际上是 #include"json.h"
  • 编辑到#include 中,然后从INC中删除最终的json目录,一切都应该没问题。
  • 完成。以为我最终切换到另一个 json lib。但我还是喜欢这个解释。
  • 这是here描述的未定义宏问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 2017-10-21
  • 2016-08-20
相关资源
最近更新 更多