当前位置: 首页 > news >正文

基于centos7.7编译Redis6.0

背景:
OS:CentOs 7.7
Redis: 6.0.6

  1. 编译构建报错如下:
In file included from server.c:30:0:
server.h:1044:5: error: expected specifier-qualifier-list before ‘_Atomic’_Atomic unsigned int lruclock; /* Clock for LRU eviction */^
server.c: In function ‘serverLogRaw’:
server.c:1028:31: error: ‘struct redisServer’ has no member named ‘logfile’int log_to_stdout = server.logfile[0] == '\0';^
server.c:1031:23: error: ‘struct redisServer’ has no member named ‘verbosity’if (level < server.verbosity) return;^
server.c:1033:47: error: ‘struct redisServer’ has no member named ‘logfile’fp = log_to_stdout ? stdout : fopen(server.logfile,"a");^
server.c:1046:47: error: ‘struct redisServer’ has no member named ‘timezone’nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);^
server.c:1046:63: error: ‘struct redisServer’ has no member named ‘daylight_active’nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);^
server.c:1049:19: error: ‘struct redisServer’ has no member named ‘sentinel_mode’...server.c:5103:19: error: ‘struct redisServer’ has no member named ‘supervised_mode’if (server.supervised_mode == SUPERVISED_SYSTEMD) {^
server.c:5104:24: error: ‘struct redisServer’ has no member named ‘masterhost’if (!server.masterhost) {^
server.c:5117:15: error: ‘struct redisServer’ has no member named ‘maxmemory’if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {^
server.c:5117:39: error: ‘struct redisServer’ has no member named ‘maxmemory’if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {^
server.c:5118: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: In function ‘hasActiveChildProcess’:
server.c:1476:1: warning: control reaches end of non-void function [-Wreturn-type]}^
server.c: In function ‘allPersistenceDisabled’:
server.c:1482:1: warning: control reaches end of non-void function [-Wreturn-type]}^
server.c: In function ‘writeCommandsDeniedByDiskError’:
server.c:3747:1: warning: control reaches end of non-void function [-Wreturn-type]}^
server.c: In function ‘iAmMaster’:
server.c:4914:1: warning: control reaches end of non-void function [-Wreturn-type]}^
make[1]: *** [server.o] Error 1
make[1]: Leaving directory `/root/redis-6.0.1/src'
make: *** [all] Error 2

编译文件报错,查看编译文件

查看redis6.0 源码的makefile文件

/*Default settings 这里标明了需要用到C11的特性*/STD=-std=c11 -pedantic -DREDIS_STATIC=''
ifneq (,$(findstring clang,$(CC)))
ifneq (,$(findstring FreeBSD,$(uname_S)))STD+=-Wno-c11-extensions
endif
endif
WARN=-Wall -W -Wno-missing-field-initializers
OPT=$(OPTIMIZATION)PREFIX?=/usr/local
INSTALL_BIN=$(PREFIX)/bin
INSTALL=install
PKG_CONFIG?=pkg-config# Default allocator defaults to Jemalloc if it's not an ARM
MALLOC=libc
ifneq ($(uname_M),armv6l)
ifneq ($(uname_M),armv7l)
ifeq ($(uname_S),Linux)MALLOC=jemalloc
endif
endif
endif
我们再去查看5.0
/* Default settings  这里版本5.0 支持的是c99特性
继续查看低版本,发现低于版本6.0 需要的是都是c99特性
*/STD=-std=c99 -pedantic -DREDIS_STATIC=''
ifneq (,$(findstring clang,$(CC)))
ifneq (,$(findstring FreeBSD,$(uname_S)))STD+=-Wno-c11-extensions
endif
endif
WARN=-Wall -W -Wno-missing-field-initializers
OPT=$(OPTIMIZATION)PREFIX?=/usr/local
INSTALL_BIN=$(PREFIX)/bin
INSTALL=install/*Default allocator defaults to Jemalloc if it's not an ARM
这里也值得注意 架构不是arm 的 默认内存分配器是jemalloc
*/
MALLOC=libc
ifneq ($(uname_M),armv6l)
ifneq ($(uname_M),armv7l)
ifeq ($(uname_S),Linux)MALLOC=jemalloc
endif
endif
endif
C11特性

C11 参考链接

引用wiki的解释如下

GCC 4.9 Changes: “ISO C11 support is now at a similar level of completeness to ISO C99 support: substantially complete modulo bugs, extended identifiers (supported except for corner cases when -fextended-identifiers is used), floating-point issues (mainly but not entirely relating to optional C99 features from Annexes F and G) and the optional Annexes K (Bounds-checking interfaces) and L (Analyzability).

gcc版本在4.9 以上才有C11特性,我们的centos 7.7 默认gcc版本是4.8

C99特性

C99 参考链接

官方解释如下:

C99 is substantially completely supported as of GCC 4.5 (with -std=c99 -pedantic-errors used; -fextended-identifiers also needed to enable extended identifiers before GCC 5), modulo bugs and floating-point issues (mainly but not entirely relating to optional C99 features from Annexes F and G). The following table gives more details of the C99 support in different GCC versions.

c99特性是版本gcc 4.5有的

解决办法

  • 降低redis版本

  • 升级gcc版本 使其支持c11特性

    显然我们采用第二种 升级gcc版本

升级gcc
yum -y install gcc gcc-c++ make tcl centos-release-scl devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils && scl enable devtoolset-9 bash
系统版本gcc版本
centos 64.4.7
centos 74.8.5
centos 88.3.1
http://www.lryc.cn/news/501119.html

相关文章:

  • uni-app项目无法在Android Studio模拟器上运行
  • 第一部分:Linux系统(基础及命令)
  • No module named ‘_ssl‘ No module named ‘_ctypes‘
  • 【QT】编写第一个 QT 程序 对象树 Qt 编程事项 内存泄露问题
  • VTK编程指南<六>:VTK可视化管线与渲染详解
  • 基于STM32的智能计步器
  • VB.NET 从入门到精通:开启编程进阶之路
  • 射频电路屏蔽简略
  • 基础算法——搜索与图论
  • redis优化编码之字符串
  • Python特定版本的安装/卸载/环境配置,Spyder安装教程
  • 全局搜索正则表达式(grep)
  • linux-12 关于shell(十一)ls
  • 编写指针函数使向右循环移动m个位置
  • xvisor调试记录
  • MongoDB-ObjectID 生成器
  • CUDA 计时功能,记录GPU程序/函数耗时,cudaEventCreate,cudaEventRecord,cudaEventElapsedTime
  • PDF 文件如何转为 CAD 图纸?PDF2CAD 使用教程
  • 【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题
  • 暴雨AI加速计算服务器新品X8840上市
  • 在多个分布式机器间设置和使用 NFS(Network File System)共享目录的步骤如下:
  • 机器学习中的 Transformer 简介(第 1 部分)
  • D3实现站点路线图demo分享
  • 非文件形式的内存动态函数库调用接口
  • liunx docker 部署 nacos seata sentinel
  • 解决没法docker pull问题
  • 面试小札:闪电五连鞭_2
  • Milvus向量数据库06-RAG检索增强
  • 信创国产化时代:打造安全高效的信创网站解决方案
  • python编程Day13-异常介绍捕获异常抛出异常