J'utilise un Wind River Compiler 4 (gcc (C) et g ++ (C++)) et compile tous mes projets sans aucun problème. Maintenant, je dois utiliser Coverity Static Analysis pour vérifier mon code. J'ai configuré les compilateurs spécifiques. Pour le code C (gcc) il n'y a aucun problème et je peux exécuter l'analyse, mais pour le C++ - code (g ++) j'ai eu beaucoup d'erreurs:Comment obtenir une analyse statique de Coverity compatible avec C++ 0x standard?
.../c++config.h", line 214: error #40:
expected an identifier
inline namespace __gnu_cxx_ldbl128 { }
^
.../c++config.h", line 214: error #326:
inline specifier allowed on function declarations only
inline namespace __gnu_cxx_ldbl128 { }
^
.../c++config.h", line 214: error #65:
expected a ";"
inline namespace __gnu_cxx_ldbl128 { }
^
.../include/string.h", line 76: error #312:
cannot overload functions distinguished by return type alone
extern __const void *memchr (__const void *__s, int __c, size_t __n)
^
.../include/string.h", line 116: error #312:
cannot overload functions distinguished by return type alone
extern "C++" __const void *memchr (__const void *__s, int __c, size_t __n)
^
Il semble y avoir quelques C++ 11 fonctionnalités spécifiques comme l'espace de noms inline mais le code n'utilise pas ces fonctionnalités. Les erreurs ci-dessus sont produites avec un HelloWorld-Code:
#include "stdio.h"
#include "util.h"
#include <string>
#include "string.h"
using namespace std;
int main()
{
printf("Hello World, C++ version: %d.%d.%d\r\n",__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__);
return 0;
}
j'ai essayé de régler le C++ standard avec g ++ Option
-std=c++98
mais le résultat n'a pas changé.
Le test de code est dans une grande hiérarchie de construction, mais les étapes de Coverity sont comme ceci:
-
cible
- et ensemble env (Wind River 4 Linux)
- make clean
- cov-configure avec le compilateur et le type dir
- cov-construire avec le bon "faire toute commande" qui fonctionne seul
- cov-analyser
- si (no_error) cov-comm il-défauts
J'ai également configuré Coverity pour remplacer tout «espace de noms en ligne» par «espace de noms» pendant la cov-build (--ppp-translator replace/inline namespace/namespace
). Les erreurs en ligne ont disparu mais cela produit plus de ces erreurs de surcharge et ne génère pas correctement. Aussi essayé d'enlever le "C++" de la même manière, mais n'a pas fonctionné, il y a toujours plus d'erreurs.
Quelqu'un a-t-il une idée de ce qui est le problème ici? Et comment puis-je obtenir la version Coverity sans erreurs? Peut-être que je peux configurer Coverity pour ignorer les en-têtes standard C++ mais je ne sais pas comment?
Quelle version de gcc utilisez-vous? 4 n'est pas assez spécifique. Quoi qu'il en soit, vous devriez ouvrir un dossier avec [email protected] - envoyez-leur votre journal de construction et source prétraité et ils seront en mesure de vous dire ce que vous devez ajouter à votre configuration pour permettre à cov-emit de le traiter avec succès. –
Le WindRiver Env. est WR-Linux-4.0/Toolchain-4.4-291 et le gcc qui est utilisé semble être la version 4.4.1. C'est la version du répertoire include de gcc pendant le script de construction. Je suis maintenant aussi en contact avec le support: Le problème est que WindRiver Compiler n'est pas particulièrement supporté sous Linux, mais presque * n'importe quel compilateur gcc. Ils ont maintenant la source prétraité et l'examinent. Le support WindRiver est également impliqué. – Indimental
Réponse de Coverity Support et nous essayons maintenant de faire une solution de contournement. – Indimental