轉:https://www.cnblogs.com/operationhome/default.html?page=3
原作者:
------------------------------------------------------------
對於redis安裝的這個錯誤,我在博客redis 安裝 與錯誤解決辦法最后有提及,但是網上大部分文章的對這個問題的解答都是有誤的。所以在這里單列出來。
錯誤內容:
jemalloc/jemalloc.h: No such file or directory。
文檔
針對這個錯誤,我們可以在README.md 文件中看到解釋。
--------- Selecting a non-default memory allocator when building Redis is done by setting the `MALLOC` environment variable. Redis is compiled and linked against libc malloc by default, with the exception of jemalloc being the default on Linux systems. This default was picked because jemalloc has proven to have fewer fragmentation problems than libc malloc. To force compiling against libc malloc, use: % make MALLOC=libc To compile against jemalloc on Mac OS X systems, use: % make MALLOC=jemalloc Verbose build -------------
網上錯誤解決辦法
網上大部分解決辦法都是錯誤的,如下文:
(錯誤解決辦法)
make MALLOC=libc
正確解決辦法
正確解決辦法(針對2.2以上的版本)
清理上次編譯殘留文件,重新編譯
make distclean && make
導致出現這個錯誤的原因
錯誤的本質是我們在開始執行make 時遇到了錯誤(大部分是由於gcc未安裝),然后我們安裝好了gcc 后,我們再執行make ,這時就出現了jemalloc/jemalloc.h: No such file or directory。這是因為上次的
編譯失敗,有殘留的文件,我們需要清理下,然后重新編譯就可以了。
網上的解決辦法是有什么錯誤嗎?
網上的解決辦法雖然最后也是可以成功安裝好 redis ,但是是有一些隱患的,首先我們要知道redis 需要使用內存分配器的, make MALLOC=jemalloc 就是指定內存分配器為 jemalloc ,make MALLOC=libc 就是指定內存分配器為 libc ,這個是有安全隱患的,jemalloc 內存分配器在實踐中處理內存碎片是要比libc 好的,而且在README.md 文檔也說明到了,jemalloc內存分配器也是包含在源碼包里面的,可以在deps 目錄下看到 jemalloc 目錄。