4

Coverity 扫描构建工具无法编译任何包含<stdlib.h>在 Ubuntu 18.04 上的 C 文件,当_GNU_SOURCE定义为:

$ cat > main.c
#include <stdlib.h>
int main() {
}
$ 
$ gcc -D_GNU_SOURCE=1 -o main main.c 
$ 
$ /opt/cov-analysis/bin/cov-build --dir cov-int gcc -D_GNU_SOURCE=1 -o main main.c 
Coverity Build Capture (64-bit) version 2017.07 on Linux 4.15.0-20-generic x86_64
...
[WARNING] Emitted 0 C/C++ compilation units (0%) successfully
...
$ 

相同的构建在 Ubuntu 16.04 或_GNU_SOURCE未定义的情况下完美运行:

$ /volatile/local/cov-analysis/bin/cov-build --dir cov-int gcc -o main main.c 
Coverity Build Capture (64-bit) version 2017.07 on Linux 4.15.0-20-generic x86_64
...
Emitted 1 C/C++ compilation units (100%) successfully
...
$ 

如何让 Coverity Scan 构建_GNU_SOURCE在 Ubuntu 18.04 上定义的 C 源代码?

对于那些感兴趣的文件cov-int/build-log.txt,可以在这里找到:
https ://gist.github.com/DimitriPapadopoulos/0dcd9018eed26401cc6095087d9cc1d5

4

2 回答 2

2

Coverity 未能定义 GCC 将定义的类型,但无论如何它都声称是 GCC。这是一个解决方法:https ://gist.github.com/vathpela/0cede6d6eb5b0ec0791c6afc4282c340#file-fix_coverity-h

只要确保你这样做:

#include "fix_coverity.h"

stdlib.h被包含之前,无论是直接还是间接。

于 2019-05-08T20:57:53.127 回答
2

在联系 Coverity 支持后,这似乎是已知的错误。他们建议我通过从默认的 Ubuntu 18.04 编译器 (GCC 7) 切换到以前的版本 (GCC 6) 来解决这个问题:

sudo apt install gcc-6

事实上_Float32_Float32x,_Float64和是在 GCC 7 中引入_Float64x的。_Float128

于 2018-05-22T16:18:35.970 回答