linux中安装redis 使用make install 命令报错

错误

server.c:5007:38: error: ‘struct redisServer’ has no member named ‘aof_filename’
         if (loadAppendOnlyFile(server.aof_filename) == C_OK)
                                      ^
server.c:5012:27: error: ‘struct redisServer’ has no member named ‘rdb_filename’
         if (rdbLoad(server.rdb_filename,&rsi,RDBFLAGS_NONE) == C_OK) {
                           ^
server.c:5017:24: error: ‘struct redisServer’ has no member named ‘masterhost’
             if ((server.masterhost ||
                        ^
server.c:5018:24: error: ‘struct redisServer’ has no member named ‘cluster_enabled’
                 (server.cluster_enabled &&
                        ^
In file included from server.c:31:0:
server.c:5019:35: error: ‘struct redisServer’ has no member named ‘cluster’
                 nodeIsSlave(server.cluster->myself))) &&
                                   ^
cluster.h:59:26: note: in definition of macro ‘nodeIsSlave’
 #define nodeIsSlave(n) ((n)->flags & CLUSTER_NODE_SLAVE)
                          ^
server.c:5027:30: error: ‘struct redisServer’ has no member named ‘replid’
                 memcpy(server.replid,rsi.repl_id,sizeof(server.replid));
                              ^
server.c:5027:63: error: ‘struct redisServer’ has no member named ‘replid’
                 memcpy(server.replid,rsi.repl_id,sizeof(server.replid));
                                                               ^
server.c:5028:23: error: ‘struct redisServer’ has no member named ‘master_repl_offset’
                 server.master_repl_offset = rsi.repl_offset;
                       ^
server.c:5033:32: error: ‘struct redisServer’ has no member named ‘cached_master’
                 selectDb(server.cached_master,rsi.repl_stream_db);
                                ^
server.c: In function ‘redisSetProcTitle’:
server.c:5052:15: error: ‘struct redisServer’ has no member named ‘cluster_enabled’
     if (server.cluster_enabled) server_mode = " [cluster]";
               ^
server.c:5053:20: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
     else if (server.sentinel_mode) server_mode = " [sentinel]";
                    ^
server.c:5057:15: error: ‘struct redisServer’ has no member named ‘bindaddr_count’
         server.bindaddr_count ? server.bindaddr[0] : "*",
               ^
server.c:5057:39: error: ‘struct redisServer’ has no member named ‘bindaddr’
         server.bindaddr_count ? server.bindaddr[0] : "*",
                                       ^
server.c:5058:15: error: ‘struct redisServer’ has no member named ‘port’
         server.port ? server.port : server.tls_port,
               ^
server.c:5058:29: error: ‘struct redisServer’ has no member named ‘port’
         server.port ? server.port : server.tls_port,
                             ^
server.c:5058:43: error: ‘struct redisServer’ has no member named ‘tls_port’
         server.port ? server.port : server.tls_port,
                                           ^
server.c: In function ‘redisIsSupervised’:
server.c:5115:19: error: ‘struct redisServer’ has no member named ‘supervised_mode’
             server.supervised_mode = SUPERVISED_SYSTEMD;
                   ^
server.c: In function ‘iAmMaster’:
server.c:5132:21: error: ‘struct redisServer’ has no member named ‘cluster_enabled’
     return ((!server.cluster_enabled && server.masterhost == NULL) ||
                     ^
server.c:5132:47: error: ‘struct redisServer’ has no member named ‘masterhost’
     return ((!server.cluster_enabled && server.masterhost == NULL) ||
                                               ^
server.c:5133:20: error: ‘struct redisServer’ has no member named ‘cluster_enabled’
             (server.cluster_enabled && nodeIsMaster(server.cluster->myself)));
                    ^
In file included from server.c:31:0:
server.c:5133:59: error: ‘struct redisServer’ has no member named ‘cluster’
             (server.cluster_enabled && nodeIsMaster(server.cluster->myself)));
                                                           ^
cluster.h:58:27: note: in definition of macro ‘nodeIsMaster’
 #define nodeIsMaster(n) ((n)->flags & CLUSTER_NODE_MASTER)
                           ^
server.c: In function ‘main’:
server.c:5180:11: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
     server.sentinel_mode = checkForSentinelMode(argc,argv);
           ^
server.c:5197:15: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
     if (server.sentinel_mode) {
               ^
server.c:5264:19: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
         if (server.sentinel_mode && configfile && *configfile == '-') {
                   ^
server.c:5276:11: error: ‘struct redisServer’ has no member named ‘supervised’
     server.supervised = redisIsSupervised(server.supervised_mode);
           ^
server.c:5276:49: error: ‘struct redisServer’ has no member named ‘supervised_mode’
     server.supervised = redisIsSupervised(server.supervised_mode);
                                                 ^
server.c:5277:28: error: ‘struct redisServer’ has no member named ‘daemonize’
     int background = server.daemonize && !server.supervised;
                            ^
server.c:5277:49: error: ‘struct redisServer’ has no member named ‘supervised’
     int background = server.daemonize && !server.supervised;
                                                 ^
server.c:5290:168: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
         serverLog(LL_WARNING, "Warning: no config file specified, using the default config. In order to specify a config file use %s /path/to/%s.conf", argv[0], server.sentinel_mode ? "sentinel" : "redis");
                                                                                                                                                                        ^
server.c:5297:29: error: ‘struct redisServer’ has no member named ‘pidfile’
     if (background || server.pidfile) createPidFile();
                             ^
server.c:5302:16: error: ‘struct redisServer’ has no member named ‘sentinel_mode’
     if (!server.sentinel_mode) {
                ^
server.c:5312:19: error: ‘struct redisServer’ has no member named ‘cluster_enabled’
         if (server.cluster_enabled) {
                   ^
server.c:5320:19: error: ‘struct redisServer’ has no member named ‘ipfd_count’
         if (server.ipfd_count > 0 || server.tlsfd_count > 0)
                   ^
server.c:5320:44: error: ‘struct redisServer’ has no member named ‘tlsfd_count’
         if (server.ipfd_count > 0 || server.tlsfd_count > 0)
                                            ^
server.c:5322:19: error: ‘struct redisServer’ has no member named ‘sofd’
         if (server.sofd > 0)
                   ^
server.c:5323:94: error: ‘struct redisServer’ has no member named ‘unixsocket’
             serverLog(LL_NOTICE,"The server is now ready to accept connections at %s", server.unixsocket);
                                                                                              ^
server.c:5324:19: error: ‘struct redisServer’ has no member named ‘supervised_mode’
         if (server.supervised_mode == SUPERVISED_SYSTEMD) {
                   ^
server.c:5325:24: error: ‘struct redisServer’ has no member named ‘masterhost’
             if (!server.masterhost) {
                        ^
server.c:5335:19: error: ‘struct redisServer’ has no member named ‘supervised_mode’
         if (server.supervised_mode == SUPERVISED_SYSTEMD) {
                   ^
server.c:5342:15: error: ‘struct redisServer’ has no member named ‘maxmemory’
     if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {
               ^
server.c:5342:39: error: ‘struct redisServer’ has no member named ‘maxmemory’
     if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {
                                       ^
server.c:5343:176: error: ‘struct redisServer’ has no member named ‘maxmemory’
         serverLog(LL_WARNING,"WARNING: You specified a maxmemory value that is less than 1MB (current value is %llu bytes). Are you sure this is what you really want?", server.maxmemory);
                                                                                                                                                                                ^
server.c:5346:31: error: ‘struct redisServer’ has no member named ‘server_cpulist’
     redisSetCpuAffinity(server.server_cpulist);
                               ^
server.c: In function ‘hasActiveChildProcess’:
server.c:1478:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
server.c: In function ‘allPersistenceDisabled’:
server.c:1484:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
server.c: In function ‘writeCommandsDeniedByDiskError’:
server.c:3934:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
server.c: In function ‘iAmMaster’:
server.c:5134:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
make[1]: *** [server.o] Error 1
make[1]: Leaving directory `/opt/redis-6.0.9/src'
make: *** [all] Error 2

原因
自 redis 6.0.0 之后,编译 redis 需要支持 C11 特性,C11 特性在 4.9 中被引入。
Centos7 默认 gcc 版本为 4.8.5,所以需要升级gcc版本。

解决

yum -y install gcc gcc-c++ make tcl
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash

最后在make install 即可

在这里插入图片描述

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 当在Linux安装Redis时,可能会遇到make报错的情况。这可能是由于缺少依赖项或编译器版本不兼容等原因导致的。为了解决这个问题,您可以尝试以下几个步骤: 1. 确保您已经安装了所有必需的依赖项,例如gcc、make、tcl等。 2. 检查您的编译器版本是否与Redis的要求相匹配。您可以在Redis的官方网站上查找相关信息。 3. 尝试使用不同的编译器版本进行编译。您可以使用命令make CC=编译器名称”来指定使用特定的编译器。 4. 检查您的系统是否有足够的内存和磁盘空间来编译Redis。 5. 如果以上步骤都无法解决问题,您可以尝试使用其他方法来安装Redis,例如使用二进制包或使用Docker容器。 ### 回答2: Linux安装Redis时,可能会遇到make报错的情况。这通常是由于安装依赖库不完全或版本不匹配导致的。 首先,需要先确认是否已经安装了必要的依赖库,如GCC编译器、make、tcl等。如果没有安装,需要先使用命令行工具安装相关依赖库,如以下命令: $ sudo apt-get install build-essential $ sudo apt-get install tcl 其次,需要检查编译器是否正确安装并配置。如果编译器版本不匹配,也会导致make报错。可以使用以下命令检查GCC编译器是否正确安装: $ gcc --version 如果输出信息正确,说明GCC编译器已正确安装。否则需要先安装正确版本的GCC编译器。 还需检查Redis版本是否正确,如果是较早版本的Redis,可能会出现与系统不兼容的情况。此时,需要升级或是降低Redis版本以匹配系统。 最后,如果检查依赖库和编译器都正确安装、版本也匹配,但还是无法解决make报错的问题,可以尝试重新下载Redis源代码并重新编译安装。注意,下载源代码时要下载稳定版本的Redis。 总之,在安装Redis过程遇到make报错的情况,需要逐步排查原因并逐一解决,才能确保Redis的正常安装和运行。 ### 回答3: Redis 是一个高性能、高可用性的键值对存储系统,常用于缓存、消息队列等场景。在 Linux 环境下安装 Redis 十分常见,然而在安装过程,有时会遇到 make 报错的情况。下面我们就来分析一下可能出现的原因和解决方法。 1. 依赖库安装不足 在安装 Redis 时,需要预先安装几个依赖库,包括: - gcc:C、C++ 编译器 - make:自动化编译工具 - tcl:Redis 测试所需的工具 如果在安装 Redis 时没有安装上述依赖库,就可能导致 make 报错。此时,我们可以通过以下命令安装依赖库: ``` sudo apt-get update sudo apt-get install build-essential sudo apt-get install tcl ``` 2. Makefile 文件错误 如果 RedisMakefile 文件存在错误,也会导致 make 报错。我们可以检查 Makefile 文件是否完整,是否有语法错误等问题,尝试进行修复。 3. 缺少必要的头文件 在编译 Redis 时,某些头文件可能会找不到,导致 make 报错。此时,我们可以在 Makefile 文件添加缺少的头文件路径,例如: ``` CFLAGS=-I/usr/include ``` 或者使用以下命令安装缺失的头文件: ``` sudo apt-get install libc6-dev sudo apt-get install libssl-dev ``` 4. 多个版本冲突 如果系统已经安装了多个 Redis 版本,可能会导致 make 报错。此时,我们可以删除冲突的版本,或者在编译时明确指定需要编译的版本。 总之,make 报错可能有很多原因,我们需要耐心地逐一排查,找出问题所在,然后进行修复。如果问题比较复杂,可以尝试在社区或者官方论坛寻求帮助。同时,作为一名 Linux 开发人员,也应该不断提升自己的技能,积累经验,以便更好地应对各种问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值