编译安装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的时候报错
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"