2014-01-15 11 views
5

Ich habe gerade g ++ 4.8 auf meinem Ubuntu-System installiert, um einige Voraussetzungen zu erfüllen. Aber jetzt bin da ich einige C++ Kompilierungsfehlern wie diese:nicht übereinstimmende C++ Header-Versionen

build-Befehl:
g ++ - 4.8 -m64 -std = C++ 0x -c -g -I/usr/include/jsoncpp/json - std = C++ 0x -MMD-MP -MF erstellen/Debuggen/GNU-Linux-x 86/_ext/803384703/CharNode.od -o bauen/Debug/GNU-Linux-x 86/_ext/803384703/CharNode.o .. /doublets/CharNode.cpp

Fehler:

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) 
       ^

Es scheint, über die Klammer beschweren zu werden?

Auch, (bei anderen Fehlern) Ich denke, es gibt eine Versionskonflikt zwischen wchar.h (c99) und alles andere was C++ 0x (C11) ist. Irgendwelche Ideen, wie man die c11 Standardüberschriften erhält und sie in ubuntu installiert?

+2

Sie sollten mehr Quellcode anzeigen. Vielleicht möchten Sie # # '' einschließen und '-Wall -D_GNU_SOURCE -std = C++ 11' an' g ++ 'übergeben (vielleicht auch' -H'); auch welchen GCC 4.8 hast du installiert und wie (der Ubuntu ist ein Buggy 4.8.1; Upgrade auf GCC 4.8.2)? –

+0

Hmm, 4.8.1, wo bekomme ich 4.8.2, muss ich es kompilieren und bauen? Auch ich denke, ich habe das Problem gefunden. Die features.h, auf die in os_defines.h Bezug genommen wird, sind möglicherweise die falsche (ich glaube, sie nimmt die von jsoncpp auf), die im Befehl -l build enthalten ist. Um es richtig zu machen, verschiebe ich den -l Verweis auf jsoncpp ein Verzeichnis zurück. –

+0

Ja das war es, behoben. –

Antwort

11

Fest.

Das Problem war in dem Build-Befehl:

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 

Der -I Befehl Verzeichnisse suchen enthält, wenn die Header-Dateien zu lokalisieren. Sowohl os_defines.h als auch meine eigenen Dateien enthalten Verweise auf verschiedene Header-Dateien mit demselben Namen: features.h. Ich denke, es gibt einen Standard-und es gibt einen in der Jsoncpp-Bibliothek, die ich verwendet habe.

Das Problem war, dass der -I Befehl oben ein Verzeichnis zu weit ging und sollte nicht die /json am Ende gehabt haben. Die Standardbibliotheken beziehen sich auf diese Datei als features.h, und intern macht jsoncpp dasselbe für seine eigene Datei features.h.

Hätte ich die Tausenden von generierten Fehlern nachgesehen, hätte ich gesehen, dass meine eigenen Verweise auf die Header-Dateien der jsoncpp-Bibliotheken zu einem Fehler "Header-Datei nicht gefunden" führten, aber ich kam nicht so weit.

+0

Ich wechselte auch zu -std = C++ 11, aber ich habe nicht von g ++ 4.8.1 auf 4.8.2 aktualisiert –

+1

das funktionierte für mich auch. Musste "make VERBOSE = 1 install> & make.log" ausführen, um den Schuldigen g ++ Befehl zu finden – user13107

+1

Danke für das Speichern. Jsoncpp auch hier. – orodbhen

Verwandte Themen