在編譯 Redis 2.8.18 等版本時,常遇到 zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory 錯誤。這是因為預設配置要求 jemalloc 分配器,但系統未安裝該庫所致。
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
Redis 的 Makefile 預設在 Linux 系統使用 jemalloc 作為記憶體分配器(因其碎片控制優於 libc malloc)。若系統缺少 jemalloc 開發套件(jemalloc-devel 或 libjemalloc-dev),編譯時找不到頭檔案即報錯。
方法一:指定使用 libc malloc 編譯(推薦,無額外依賴)
make MALLOC=libc
此命令強制 Redis 使用系統標準 libc 分配器,繞過 jemalloc 依賴,即可順利編譯通過。
方法二:安裝 jemalloc 開發套件(若堅持使用 jemalloc)
yum install jemalloc-develapt-get install libjemalloc-dev./configure && make && make install安裝完成後,直接執行 make 即可。
Redis 官方文檔說明:
Redis is compiled and linked against libc malloc by default, with the exception of jemalloc being the default on Linux systems.
To force compiling against libc malloc, use:
% make MALLOC=libc
生產環境若對記憶體碎片敏感,建議安裝 jemalloc;一般應用場景 MALLOC=libc 完全滿足需求,且減少外部依賴風險。