Redis 编译错误:缺少静态库文件,如何解决?

发布于:2025-08-08 ⋅ 阅读:(47) ⋅ 点赞:(0)

 目录


一、问题背景

在从源代码编译 Redis(如 8.0.3 版本)时,很多开发者可能会遇到如下错误信息:

/usr/bin/ld: cannot find ../deps/fast_float/libfast_float.a: No such file or directory  
/usr/bin/ld: cannot find ../deps/jemalloc/lib/libjemalloc.a: No such file or directory  
collect2: error: ld returned 1 exit status  
make[1]: *** [Makefile:421: redis-server] Error 1  
make[1]: Leaving directory '/root/redis-8.0.3/src'  
make: *** [Makefile:11: all] Error 2

这类报错常发生在首次尝试本地源码编译时,属于构建依赖未准备完全的问题。


二、问题分析

该错误的核心原因在于 Redis 编译所依赖的两个静态库:

  • fast_float:用于高效解析浮点数的库,对 Redis 的性能优化有帮助。

  • jemalloc:高性能内存分配器,Redis 默认使用的内存分配库。

这两个依赖的静态库文件:

  • deps/fast_float/libfast_float.a

  • deps/jemalloc/lib/libjemalloc.a

在默认情况下并不会自动构建,除非显式执行相关 make 命令。因此如果直接 make Redis 主程序,就会在链接阶段因缺少 .a 文件而失败。


三、解决方案:手动编译缺失依赖

只需进入 Redis 源码目录下的 deps/ 目录,对缺失的依赖使用 make 命令进行编译即可。

  步骤如下:

# 进入 Redis 的依赖目录
cd /root/redis-8.0.3/deps

# 单独编译 fast_float 和 jemalloc
make fast_float
make jemalloc

如果不确定缺少哪些依赖,或希望一次性完成所有依赖的构建,也可以执行:

make

 编译成功后,你将看到如下文件:

  • deps/fast_float/libfast_float.a

  • deps/jemalloc/lib/libjemalloc.a

这些是 Redis 可执行程序链接过程中所必需的静态库文件。


四、重新编译 Redis 主程序

在依赖构建完成后,回到 Redis 源码主目录继续执行编译流程:

cd /root/redis-8.0.3
make

如果没有其他错误,系统将成功生成以下关键可执行文件:

  • redis-server

  • redis-cli

这标志着 Redis 本地构建成功。


五、小结与补充建议

总结一句话:遇到 .a 文件找不到的错误,优先检查 deps/ 目录的依赖是否已构建!

 建议:

  • 每次首次下载 Redis 源码时,推荐先执行:

    cd deps
    make
    
  • 若中途编译失败、切换版本或拉取更新后再次编译,建议清理旧构建缓存后再执行构建命令:

    make distclean
    make
    

成功图片:

这将更好地避免因为残留文件或不兼容编译状态导致的奇怪错误。


愿各位道友编译无坑,一键成功,愉快享受 Redis 的高性能世界!


网站公告

今日签到

点亮在社区的每一天
去签到