Redis 6.0.8编译错误解决办法

问题

当你下载redis 最新版本6.0.8 的时候会发现make的时候会报错,简单来说就是最新版的redis用到了c11 ,你的系统gcc版本低了,系统自带gcc版本是4.8.5,只需要更新下gcc到5.4以上即可,同时编译redis时带上gcc版本的使用参数,不影响系统自带gcc!我这里安装最新版gcc10.2.0

cd src && make all
make[1]: 进入目录“/opt/src/redis-6.0.8/src”
    ^[[34mCC^[[0m ^[[33mMakefile.dep^[[0m
make[1]: 离开目录“/opt/src/redis-6.0.8/src”
make[1]: 进入目录“/opt/src/redis-6.0.8/src”
    ^[[34mCC^[[0m ^[[33mserver.o^[[0m
In file included from server.c:30:0:
server.h:1065:5: error:expected specifier-qualifier-list before ‘_Atomic’
     _Atomic unsigned int lruclock; /* Clock for LRU eviction */
     ^
server.c: in function ‘serverLogRaw’中:
server.c:1032:31: error:‘struct redisServer’ has no member named ‘logfile’
     int log_to_stdout = server.logfile[0] == '\0';
                               ^
server.c:1035:23: error:‘struct redisServer’ has no member named ‘verbosity’
     if (level < server.verbosity) return;
                       ^
server.c:1037:47: error:‘struct redisServer’ has no member named ‘logfile’
     fp = log_to_stdout ? stdout : fopen(server.logfile,"a");
                                               ^
server.c:1050:47: error:‘struct redisServer’ has no member named ‘timezone’
         nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
                                               ^
server.c:1050:63: error:‘struct redisServer’ has no member named ‘daylight_active’
         nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
                                                               ^
server.c:1053:19: error:‘struct redisServer’ has no member named ‘sentinel_mode’
         if (server.sentinel_mode) {
    
    
......(后面有一长窜)

系统自带版本

[root@alert redis-6.0.8]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
Copyright © 2015 Free Software Foundation, Inc.

安装gcc

gcc 下载地址:gcc下载地址 http://mirror.hust.edu.cn/gnu/gcc/

新gcc编译安装也是需要依靠旧版本的gcc 想编译 C++11 标准下的 C++ 程序,则至少要安装 4.8 版本的 GCC 编译器,低版本的 GCC 编译器是不支持 C++11 标准的。

yum install -y glibc-static libstdc++-static
yum install -y gcc gcc-c++

手动安装GCC编译器

注意,此方式需要耗费的时间较长(几个小时),但支持安装指定版本的 GCC 编译器,并适用于大多数 Linux 发行版(不同之处会有额外提示);同时,如果想对已安装的 GCC 编译器进行升级,也可以使用此方式。

1.解压

tar -xf gcc-10.2.0.tar.gz -C /opt/src/
cd gcc-10.2.0

2.下载安装 GCC 所需要的依赖包(如 gmp、mpfr、mpc 等):

[root@alert gcc-10.2.0]# ./contrib/download_prerequisites
2020-09-11 16:37:01 URL:http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840/2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2020-09-11 16:37:16 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284/1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2020-09-11 16:37:28 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925/669925] -> "./mpc-1.0.3.tar.gz" [1]
2020-09-11 16:37:46 URL:http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291/1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: 确定
mpfr-3.1.4.tar.bz2: 确定
mpc-1.0.3.tar.gz: 确定
isl-0.18.tar.bz2: 确定
All prerequisites downloaded successfully.

3.手动创建一个目录,用于存放编译 GCC 源码包生成的文件

mkdir gcc-build-10.2.0
cd gcc-build-10.2.0
pwd
/opt/src/gcc-10.2.0/gcc-build-10.2.0
#使用gcc目录下的命令编译安装
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --prefix=/opt/app/gcc-10.2.0

–enable-languages 用于设定 GCC 编译器支持编译的编程语言的类别,例如 c、c++、java、objc、obj-c++、go 等,这里只安装c,c++

4.创建好 makefile 文件之后,接下来就可以使用 make 命令来编译 GCC 源程序

#耗时7小时,请规划好时间
make
make install

使用新的gcc编译redis

CC=/opt/app/gcc-10.2.0/bin/gcc make
make install PREFIX=/opt/app/redis6.0.8

猜你喜欢

转载自blog.csdn.net/tony_wzx/article/details/108538531
今日推荐