我收到以下语法错误:
../stat-time.h:58:[kernel] user error: Cannot find field st_atim
这是Paul Eggert的gnu stat-time.h。这是导致错误的片段:
#define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim)
long int get_stat_atime_ns(struct stat const *st) {
...
// 58:
return STAT_TIMESPEC(st, st_atim).tv_nsec;
...
}
我首先尝试预处理文件,然后在预处理文件上运行frama-c,但这没有帮助。 Frama-c仍在同一位置报告相同的错误,即使文件已正确预处理并且宏已正确扩展!我按如下方式调用gcc进行预处理:
gcc -E -C -I. -dD -nostdinc -D__FC_MACHDEP_X86_32 -I/usr/local/share/frama-c/libc
有什么想法吗?
答案 0 :(得分:3)
我找到了解决方案。显然,/usr/local/share/frama-c/libc/__fc_define_stat.h
中的frama-c标头缺少nsec
中的struct stat
粒度字段。我将以下字段添加到struct stat
以解决问题:
unsigned long int st_atimensec; unsigned long int st_mtimensec; unsigned long int st_ctimensec;
另外,请确保在配置时使用frama-c标头,例如configure CPP='gcc -E -C -dD -nostdinc -I/usr/local/share/frama-c/libc
。如果没有,您需要取消定义以下两个宏:
HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
,HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
和定义以下宏:HAVE_STRUCT_STAT_ST_ATIMENSEC
在标头文件中,并将其包含在config.h
或__fc_define_stat.h
中}