当定义<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
答案 0 :(得分:2)
在联系Coverity支持后,看来这是已知错误。他们建议我通过从默认的Ubuntu 18.04编译器(GCC 7)切换到以前的版本(GCC 6)来解决它:
sudo apt install gcc-6
确实_Float32
,_Float32x
,_Float64
,_Float64x
和_Float128
为introduced in GCC 7。
答案 1 :(得分:2)
Coverity无法定义GCC会定义的类型,但是无论如何它声称是GCC。解决方法:https://gist.github.com/vathpela/0cede6d6eb5b0ec0791c6afc4282c340#file-fix_coverity-h
只要确定您这样做
#include "fix_coverity.h"
直接或间接包含在stdlib.h
之前。