2014-01-15 69 views
5

我刚刚在我的ubuntu系统上安装了g ++ 4.8以满足一些先决条件。但是现在我看到像这样的一些C++编译错误:不匹配的C++头版本

构建命令:
G ++ - 4.8 -m64 -std =的C++ 0x -c -g -I/usr/include目录/ jsoncpp/JSON - std = C++ 0x -MMD -MP -MF build/Debug/GNU-Linux-x86/_ext/803384703/CharNode.od -o build/Debug/GNU-Linux-x86/_ext/803384703/CharNode.o .. /doublets/CharNode.cpp

错误:

In file included from /usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h:420:0, 
      from /usr/include/c++/4.8/bits/stl_algobase.h:59, 
      from /usr/include/c++/4.8/bits/stl_tree.h:61, 
      from /usr/include/c++/4.8/map:60, 
      from ../doublets/CharNode.h:13, 
      from ../doublets/CharNode.cpp:9: 

/usr/include/x86_64-linux-gnu/c++/4.8/bits/os_defines.h:44:19: error: missing binary operator before token "(" 
#if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE) 
       ^

这似乎是在抱怨括号?

此外,(在其他错误)我认为之间的版本不匹配wchar.h(c99)和其他一切是C++ 0x(C11)。任何想法如何获取c11标准头文件并将其安装在Ubuntu?

+2

你应该显示更多的源代码。您可能希望'#include '并将'-Wall -D_GNU_SOURCE -std = C++ 11'传递给'g ++'(也可能是'-H');你还安装了哪个GCC 4.8以及如何安装(Ubuntu的是4.8.1;升级到GCC 4.8.2)? –

+0

嗯,4.8.1,我在哪里得到4.8.2,我需要编译和构建它吗? 另外,我想我已经找到了问题。在os_defines.h中提到的features.h很可能是错误的(我认为它从jsoncpp中选取了一个),它包含在-l build命令中。为了让它抓住正确的一个,我将-l引用移到jsoncpp后面的目录中。 –

+0

是的,它是固定的。 –

回答

11

固定。

的问题是在构建命令:

g++-4.8 -m64 -std=c++0x -c -g -I/usr/include/jsoncpp/json -std=c++0x -MMD -MP -MF build/Debug/GNU-Linux-x86/_ext/803384703/CharNode.o.d -o build/Debug/GNU-Linux-x86/_ext/803384703/CharNode.o ../doublets/CharNode.cpp 

-I命令包括目录查找头文件时要搜索。 os_defines.h和我自己的文件都包含对同名不同头文件的引用:features.h。我认为这是一个标准的,我使用的是jsoncpp库中的一个。

问题是上面的-I命令去了一个目录太远了,最后不应该有/json。标准库将此文件称为features.h,内部jsoncpp对其自己的features.h文件也是如此。

如果我向下看了数千个生成的错误,我会看到我自己对jsoncpp库头文件的引用导致“找不到头文件”错误,但我没有得到这么多。

+0

我也切换到-std = C++ 11,但我还没有从g ++ 4.8.1升级到4.8.2 –

+1

这也适用于我。必须运行'make VERBOSE = 1 install>&make.log'才能捕捉到罪魁祸首g ++命令 – user13107

+1

感谢您的保存。 Jsoncpp也在这里。 – orodbhen