解压编译时报错:
/redis-6.0.1 # make && make test && make install
make[3]: 离开目录“/usr/local/redis/redis-6.0.1/deps/jemalloc”
make[2]: 离开目录“/usr/local/redis/redis-6.0.1/deps”
CC adlist.o
CC quicklist.o
CC ae.o
CC anet.o
CC dict.o
CC server.o
In file included from server.c:30:0:
server.h:1044:5: 错误:expected specifier-qualifier-list before ‘_Atomic’
_Atomic unsigned int lruclock; /* Clock for LRU eviction */
^
server.c: 在函数‘serverLogRaw’中:
server.c:1028:31: 错误:‘struct redisServer’没有名为‘logfile’的成员
int log_to_stdout = server.logfile[0] == '\0';
^
server.c:1031:23: 错误:‘struct redisServer’没有名为‘verbosity’的成员
if (level < server.verbosity) return;
^
server.c:1033:47: 错误:‘struct redisServer’没有名为‘logfile’的成员
fp = log_to_stdout ? stdout : fopen(server.logfile,"a");
^
server.c:1046:47: 错误:‘struct redisServer’没有名为‘timezone’的成员
nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
...省略N行...
...省略N行...
...省略N行...
server.c: 在函数‘iAmMaster’中:
server.c:4914:1: 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]
}
^
make[1]: *** [server.o] 错误 1
make[1]: 离开目录“/usr/local/redis/redis-6.0.1/src”
make: *** [all] 错误 2
网上查阅资料,说是gcc版本太低导致,查看系统的gcc版本
# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
Copyright © 2015 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
- 安装scl源
yum install centos-release-scl scl-utils-build
- 列出scl可用源
yum list all --enablerepo='centos-sclo-rh'
- 安装8版本的gcc、gcc-c++、gdb工具链(toolchian)
yum install -y devtoolset-8-toolchain
scl enable devtoolset-8 bash
gcc --version
再次编译,报错解决:yum install -y tcl
make[1]: 离开目录“/usr/local/redis/redis-5.0.8/src”
cd src && make test
make[1]: 进入目录“/usr/local/redis/redis-5.0.8/src”
You need tcl 8.5 or newer in order to run the Redis test
make[1]: *** [test] 错误 1
make[1]: 离开目录“/usr/local/redis/redis-5.0.8/src”
make: *** [test] 错误 2