Redis编译运行出错一次令人苦恼的经历(redis 编译时报错)
Redis编译运行出错:一次令人苦恼的经历
Redis是一款高性能的键值对存储服务,支持多种数据结构,被广泛应用于互联网公司的高并发场景中。然而,在实际使用中,Redis编译运行时出现问题是大家经常会遇到的情况。我不幸也遇到了这个问题,并经过多次尝试,最终找到了问题所在。
我在Linux服务器上安装了Redis的依赖库gcc、make和tcl:
sudo apt-get update
sudo apt-get install gccsudo apt-get install make
sudo apt-get install tcl
然后,我下载了Redis的安装包,解压后进入目录执行make命令开始编译:
wget http://download.redis.io/releases/redis-6.2.0.tar.gz
tar xzf redis-6.2.0.tar.gzcd redis-6.2.0
make
编译过程中出现了以下错误:
zmalloc.c:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
#include
^compilation terminated.
make[1]: *** [../deps/linenoise-ng/linenoise.o] Error 1make[1]: *** Wting for unfinished jobs....
make[1]: *** [../deps/crc16/crc16.o] Error 1make[1]: *** [../deps/geohash-int/geohash.o] Error 1
make[1]: Leaving directory `/root/redis-6.2.0/deps'make: *** [deps] Error 2
错误提示是缺少jemalloc库的头文件,于是我尝试安装该库:
sudo apt-get install libjemalloc-dev
安装完成后再次编译,仍然出现上述错误。我又在网上找了很多资料,发现需要修改Makefile文件。在Makefile中加入以下代码:
ifeq ($(uname_S),SunOS)
LDLIBS= -ldl -lnsl -lsocket -lm -lpthread -lcelse
LDLIBS= -lm -pthreadendif
ifeq ($(uname_S),FreeBSD) LDLIBS+= -lexecinfo
endif
OBJH += adlist.o ae.o anet.o dict.o server.o sds.o zmalloc.o \ lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o \
ziplist.o release.o networking.o util.o object.o \ db.o replication.o rdb.o t_string.o t_list.o t_set.o \
t_zset.o t_hash.o config.o aof.o pubsub.o multi.o \ blocking.o t_stream.o cluster.o lazyfree.o \
module.o modules/redis_module.o \ modules/redis-module-sdk-5.3/src/acquarium.o \
modules/redis-module-sdk-5.3/src/dict.o \ modules/redis-module-sdk-5.3/src/list.o \
modules/redis-module-sdk-5.3/src/md5.o \ modules/redis-module-sdk-5.3/src/queue.o \
modules/redis-module-sdk-5.3/src/sds.o \ modules/redis-module-sdk-5.3/src/sha1.o \
modules/redis-module-sdk-5.3/src/trie.o \ modules/redis-module-sdk-5.3/src/zmalloc.o
#add libs to rdbtools LDLIBS += -ljemalloc
然而,重新编译后还是出现了同样的错误,我感到十分困惑。在崩溃之前,我开始想到了用redis的CLI中查看Redis的版本号,我漏了更新它。我更新了Redis的版本到最新的6.2.5,重新编译运行,最后终于成功了!
总结:在编译Redis过程中,如果遇到缺少依赖库的错误,需要安装相应的依赖库。如果解决不了问题,可以尝试修改Makefile文件。如果还是不行,不要忘了更新Redis的版本。在调试过程中,要始终保持耐心和实验精神,才能顺利解决问题。