Coverity Scan无法构建<stdlib.h>并定义了_GNU_SOURCE

时间:2018-05-20 11:13:25

标签: c coverity ubuntu-18.04

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

$ 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在Ubuntu 18.04上定义_GNU_SOURCE来构建C源?

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

2 个答案:

答案 0 :(得分:2)

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

sudo apt install gcc-6

确实_Float32_Float32x_Float64_Float64x_Float128introduced in GCC 7

答案 1 :(得分:2)

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

只要确定您这样做

#include "fix_coverity.h"

直接或间接包含在stdlib.h之前。