编译安装zabbix6.0.14报错parse.c:391:2: error: ‘for’ loop initial declarations are only allowed in C99 mode

编译安装zabbix6.0.14报错:parse.c:391:2: error: ‘for’ loop initial declarations are only allowed in C99 mode for(int i = ctx->ops.values_num - 1; i >= 0; i --)

1、报错背景

编译安装zabbix6.0.14

执行完./configure

make install的时候报错

编译安装zabbix6.0.14报错parse.c:391:2: error: ‘for’ loop initial declarations are only allowed in C99 mode_第1张图片

2、报错代码

Making install in zbxeval
make[3]: Entering directory `/root/zabbix-6.0.14/src/libs/zbxeval'
depbase=`echo parse.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
cc -DHAVE_CONFIG_H -I. -I../../../include     -g -O2   -MT parse.o -MD -MP -MF $depbase.Tpo -c -o parse.o parse.c &&\
mv -f $depbase.Tpo $depbase.Po
parse.c: In function ‘eval_get_last_function_token’:
parse.c:391:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
  for(int i = ctx->ops.values_num - 1; i >= 0; i --)
  ^
parse.c:391:2: note: use option -std=c99 or -std=gnu99 to compile your code
make[3]: *** [parse.o] Error 1
make[3]: Leaving directory `/root/zabbix-6.0.14/src/libs/zbxeval'
make[2]: *** [install-recursive] Error 1
make[2]: Leaving directory `/root/zabbix-6.0.14/src/libs'
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory `/root/zabbix-6.0.14/src'
make: *** [install-recursive] Error 1

3、解决方法

这句话的意思是,直接在for循环中声明变量只在C99模式下允许的。这是什么意思?

这是因为,部分人使用的编译器是老版本的(一般都是C89的,例如gcc编译器)

而这种直接在for循环中声明变量的方法是C99后来添加的,所以在C89模式编译就过不去,必须换C99编译才可以

在执行./configure之前设置一个环境变量从新编译即可通过

export CFLAGS="-std=gnu99"

你可能感兴趣的:(Linux系统,c语言,开发语言)