Redis 编译错误:缺少静态库文件,如何解决?
目录
-
一、问题背景
-
二、问题分析
-
三、解决方案:手动编译缺失依赖
-
四、重新编译 Redis 主程序
-
五、小结与补充建议
一、问题背景
在从源代码编译 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 的高性能世界!