Sto usando un Wind River Compiler 4 (gcc (C) e g ++ (C++)) e compila tutti i miei progetti senza problemi. Ora devo usare Coverity Static Analysis per verificare il mio codice. Ho configurato i compilatori specifici. Per il C-Code (GCC) non ci sono problemi e posso eseguire l'analisi, ma per il C++ - Codice (g ++) ho avuto un sacco di errori:Come ottenere l'analisi statica Coverity compatibile con lo standard C++ 0x?
.../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)
^
E sembrano essere un po 'C++ 11 caratteristiche specifiche come lo spazio dei nomi inline ma il codice non usa queste funzionalità. Gli errori sopra sono prodotte con 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;
}
ho cercato di impostare lo standard C++ con l'opzione g ++
-std=c++98
ma il risultato non cambiato.
Il Test-Code è in una gerarchia di grande costruzione, ma i passaggi per Coverity sono come questa:
- target e ENV set (Wind River 4 Linux)
- make clean
- COV-configure con il compilatore dir e il tipo
- COV-costruire con la corretta "fare tutto" comando che lavora da solo
- COV-analizzare
- se (NO_ERROR) COV-comm da-difetti
Ho anche configurato Coverity per sostituire tutti "namespace in linea" con "namespace" durante il COV-build (--ppp-translator replace/inline namespace/namespace
). Gli errori in linea sono scomparsi, ma produce più di questi errori di sovraccarico e non si costruisce con successo. Anche provato a rimuovere il "C++" allo stesso modo ma non ha funzionato ci sono sempre più errori.
Qualcuno ha un'idea di quale sia il problema qui? E come posso ottenere la build Coverity senza errori? Forse posso configurare Coverity per ignorare le intestazioni standard di C++ ma non ora come?
Quale versione di gcc stai usando? 4 non è abbastanza specifico. Ad ogni modo, dovresti aprire un caso con [email protected] - invia loro il tuo log di build e la sorgente preelaborata e saranno in grado di dirti cosa devi aggiungere alla tua configurazione per consentire a cov-emit di elaborarlo con successo. –
The WindRiver Env. è WR-Linux-4.0/Toolchain-4.4-291 e il gcc che viene utilizzato sembra essere la versione 4.4.1. Questa è la versione della directory di inclusione di gcc durante lo script di build. Ora sono anche in contatto con il supporto: il problema è che in particolare WindRiver Compiler non è supportato in Linux, ma quasi * qualsiasi * compilatore gcc. Hanno ora la fonte preelaborata ed esaminarla. Anche il supporto WindRiver è ora coinvolto. – Indimental
Hai ricevuto risposta dal Coverity Support e ora stiamo cercando di risolvere il problema. – Indimental