我正在使用 Wind River Compiler 4(gcc (C) 和 g++ (C++)),它可以毫无问题地编译我的所有项目。现在我必须使用 Coverity 静态分析来检查我的代码。我已经配置了特定的编译器。对于 C 代码 (gcc) 没有问题,我可以运行分析,但对于 C++ 代码 (g++),我遇到了很多错误:
.../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)
^
它似乎是一些 C++11 特定功能,例如内联命名空间,但代码不使用这些功能。上面的错误是由 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;
}
我尝试使用 g++ 选项设置 c++ 标准
-std=c++98
但结果没有改变。
测试代码在一个大的构建层次结构中,但 Coverity 的步骤如下:
- 目标和环境设置(Wind River 4 Linux)
- 打扫干净
- 带有编译器目录和类型的 cov-configure
- cov-build 使用正确的“make all”命令单独工作
- 共分析
- if (no_error) cov-commit-defects
我还配置了 Coverity 以在 cov-build ( --ppp-translator replace/inline namespace/namespace
) 期间将所有“内联命名空间”替换为“命名空间”。内联错误消失了,但它会产生更多这种重载错误并且没有成功构建。还尝试以相同的方式删除“C++”,但没有奏效,总是有更多错误。
有人知道这里有什么问题吗?我怎样才能在没有错误的情况下获得 Coverity 构建?也许我可以将 Coverity 配置为忽略 C++ 标准头文件,但我现在不怎么做?