?目錄
-
一、問題背景
-
二、問題分析
-
三、解決方案:手動編譯缺失依賴
-
四、重新編譯 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 的高性能世界!