Ich verwende einen Wind River Compiler 4 (gcc (C) und g++ (C++)) und er kompiliert alle meine Projekte ohne Probleme. Jetzt muss ich Coverity Static Analysis verwenden, um meinen Code zu überprüfen. Ich habe die spezifischen Compiler konfiguriert. Für den C-Code (gcc) gibt es keine Probleme und ich kann die Analyse durchführen, aber für den C++-Code (g++) erhalte ich viele Fehler:
.../c++config.h", Zeile 214: Fehler #40:
erwartete einen Bezeichner
inline namespace __gnu_cxx_ldbl128 { }
^
.../c++config.h", Zeile 214: Fehler #326:
inline-Spezifizierer nur bei Funktionsdeklarationen erlaubt
inline namespace __gnu_cxx_ldbl128 { }
^
.../c++config.h", Zeile 214: Fehler #65:
erwartetes ";"
inline namespace __gnu_cxx_ldbl128 { }
^
.../include/string.h", Zeile 76: Fehler #312:
Funktionen können nicht allein anhand des Rückgabetyps unterschieden werden
extern __const void *memchr (__const void *__s, int __c, size_t __n)
^
.../include/string.h", Zeile 116: Fehler #312:
Funktionen können nicht allein anhand des Rückgabetyps unterschieden werden
extern "C++" __const void *memchr (__const void *__s, int __c, size_t __n)
^
Es scheinen sich einige C++11-spezifische Funktionen wie der inline-namespace zu handeln, aber der Code verwendet diese Funktionen nicht. Die oben aufgeführten Fehler wurden mit einem HelloWorld-Code erzeugt:
#include "stdio.h"
#include "util.h"
#include
#include "string.h"
using namespace std;
int main()
{
printf("Hallo Welt, C++ Version: %d.%d.%d\r\n",__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__);
return 0;
}
Ich habe versucht, den C++-Standard mit der g++-Option festzulegen
-std=c++98
aber das Ergebnis hat sich nicht geändert.
Der Test-Code befindet sich in einer großen Build-Hierarchie, aber die Schritte für Coverity sind wie folgt:
- Ziel und Umgebung einstellen (Wind River 4 Linux)
- make clean
- cov-configure mit Compiler-Verzeichnis und Typ
- cov-build mit dem richtigen "make all"-Befehl, der alleine funktioniert
- cov-analyze
- wenn (kein Fehler) cov-commit-defects
Ich habe auch Coverity konfiguriert, um alle "inline namespace" während des cov-builds durch "namespace" zu ersetzen (--ppp-translator replace/inline namespace/namespace
). Die Inline-Fehler sind verschwunden, aber es treten mehr dieser Überlastungsfehler auf und es kommt nicht zu einem erfolgreichen Build. Ich habe auch versucht, das "C++" auf die gleiche Weise zu entfernen, aber es hat nicht funktioniert, es gibt immer mehr Fehler.
Hat jemand eine Idee, was hier das Problem ist? Und wie kann ich den Coverity-Build ohne Fehler durchführen? Vielleicht kann ich Coverity konfigurieren, um Standard-C++-Header zu ignorieren, aber ich weiß nicht wie?