mac上编译redis ,报错fstat64

mac上编译redis ,报错fstat64

shell 复制代码
                                void
replication.c:1289:31: error: variable has incomplete type 'struct stat64'
            struct redis_stat buf;
                              ^
replication.c:1289:20: note: forward declaration of 'struct stat64'
            struct redis_stat buf;
                   ^
./config.h:45:20: note: expanded from macro 'redis_stat'
#define redis_stat stat64
                   ^
replication.c:1336:21: error: call to undeclared function 'fstat64'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]

因为 macOS 的 fstat 函数已经默认支持大文件(即自动处理大于 2GB 的文件),因此不需要使用 fstat64

查看 src/config.h文件

可以看到关于fstat64的引用

复制代码
#if defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_6)
#define redis_fstat fstat64
#define redis_stat stat64
#else
#define redis_fstat fstat
#define redis_stat stat
#endif

这里是走了if分支,只要修改代码,让走else分支就可以了。

if 中主要定义了两个条件,__APPLE__mac上肯定是存在的,另一个条件MAC_OS_X_VERSION_10_6不存在,就走了if分支。因此我们定义MAC_OS_X_VERSION_10_6就可以走到else分支了。

解决方法就是在这段代码的上面增加MAC_OS_X_VERSION_10_6的定义

c 复制代码
#define MAC_OS_X_VERSION_10_6
#if defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_6)
#define redis_fstat fstat64
#define redis_stat stat64
#else
#define redis_fstat fstat
#define redis_stat stat
#endif
相关推荐
wzy06236 分钟前
Redis 哨兵模式中客户端访问服务器的过程详解
redis·sentinel
清静诗意11 分钟前
Ubuntu Redis 安装与配置指南
linux·redis·ubuntu
q***46417 分钟前
离线安装 Nginx
运维·数据库·nginx
T***u33322 分钟前
后端缓存技术学习,Redis实战案例
redis·学习·缓存
我科绝伦(Huanhuan Zhou)26 分钟前
SQL进阶必备:从计算字段到多表联结,让查询效率翻倍!
数据库·sql
梁萌29 分钟前
缓存高可用架构-读缓存
redis·缓存·架构·高可用架构·读缓存
i***48611 小时前
Redis重大版本整理(Redis2.6-Redis7.0)
java·数据库·redis
r***86982 小时前
Redis 6.2.7安装配置
前端·数据库·redis
YQ_ZJH2 小时前
Redisson 看门狗机制详解
java·redis
是Judy咋!2 小时前
Mongodb---副本集搭建(hashed分片)
数据库·mongodb·centos