报错内容如下:
server.c:4558:23: error: ‘struct redisServer’ has no member named ‘repl_state’
server.repl_state == REPL_STATE_TRANSFER,
^
server.c:4562:23: error: ‘struct redisServer’ has no member named ‘repl_state’
if (server.repl_state == REPL_STATE_TRANSFER) {
^
server.c:4567:32: error: ‘struct redisServer’ has no member named ‘repl_transfer_size’
(server.repl_transfer_size - server.repl_transfer_read),
^
server.c:4567:60: error: ‘struct redisServer’ has no member named ‘repl_transfer_read’
(server.repl_transfer_size - server.repl_transfer_read),
^
server.c:4568:33: error: ‘struct redisServer’ has no member named ‘unixtime’
(int)(server.unixtime-server.repl_transfer_lastio)
^
server.c:4568:49: error: ‘struct redisServer’ has no member named ‘repl_transfer_lastio’
(int)(server.unixtime-server.repl_transfer_lastio)
^
server.c:4572:23: error: ‘struct redisServer’ has no member named ‘repl_state’
if (server.repl_state != REPL_STATE_CONNECTED) {
^
server.c:4575:38: error: ‘struct redisServer’ has no member named ‘unixtime’
(intmax_t)(server.unixtime-server.repl_down_since));
^
server.c:4575:54: error: ‘struct redisServer’ has no member named ‘repl_down_since’
(intmax_t)(server.unixtime-server.repl_down_since));
^
server.c:4580:23: error: ‘struct redisServer’ has no member named ‘slave_priority’
server.slave_priority,
^
server.c:4581:23: error: ‘struct redisServer’ has no member named ‘repl_slave_ro’
server.repl_slave_ro);
解决如下:
查看gcc版本是否在5.3以上,CentOS7默认安装4.8.5。
升级gcc到5.3以上版本,升级到gcc 9
#编译出错时,清除编译生成的文件
make distclean
执行
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
#需要注意的是scl命令启用只是临时的,退出shell或重新打开一个shell就会恢复原系统gcc版本
scl enable devtoolset-9 bash
gcc -v
#执行以下命令永久使用
echo “source /opt/rh/devtoolset-9/enable” >> /etc/profile
#注:执行完此命令后,其它的shell窗口需要关闭重新打开才生效。
#重新打开shell窗口,再次编译