linux下安装redis,编译报错

linux下安装redis
编译时(make)遇到报错

──(root㉿kali)-[/usr/local/redis]
└─# make
cd src && make all
make[1]: Entering directory '/usr/local/redis/src'
    LINK redis-server
/usr/bin/ld: server.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: sds.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: ziplist.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: networking.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: util.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: object.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: db.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: replication.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: rdb.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: t_string.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: t_list.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: t_set.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: t_zset.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: t_hash.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: config.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: aof.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: pubsub.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: multi.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: debug.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: sort.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: syncio.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: cluster.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: crc16.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: slowlog.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: scripting.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: bio.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: rio.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: bitops.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: sentinel.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: notify.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: blocked.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: hyperloglog.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: latency.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: sparkline.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: redis-check-rdb.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: redis-check-aof.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: geo.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: lazyfree.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: module.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: evict.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: expire.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: childinfo.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: defrag.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: t_stream.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: lolwut.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
/usr/bin/ld: lolwut5.o:/usr/local/redis/src/sds.h:37: multiple definition of `SDS_NOINIT'; quicklist.o:/usr/local/redis/src/sds.h:37: first defined here
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:199: redis-server] Error 1
make[1]: Leaving directory '/usr/local/redis/src'
make: *** [Makefile:6: all] Error 2


考虑可能是gcc没有安装,使用 yum install gcc 命令安装gcc,安装过程中如果有问题,类似error: jemalloc/jemalloc.h: No such file or directory,使用 make MALLOC=libc ,然后再 cd src && make all

引用 皆我百晓生 小程序回复内容作答:
这个错误可能是因为你在编译Redis时使用了不兼容的选项或版本。解决方法如下:

  1. 确保你已经安装了Redis的所有依赖项。你可以使用以下命令安装它们:

    sudo apt-get update
    sudo apt-get install build-essential tcl
    
  2. 尝试清除之前的编译文件并重新编译:

    make distclean
    make
    
  3. 如果你正在尝试编译最新的Redis版本,请确保你的gcc编译器版本与Redis兼容。你可以尝试降级gcc版本并重新编译。例如,可以使用以下命令将gcc版本降级到5:

    sudo apt-get install gcc-5 g++-5
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 100
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 100
    
  4. 如果以上步骤都没有解决问题,可以尝试使用预编译的Redis二进制文件。你可以从Redis的官方网站下载预编译的二进制文件并安装。

希望这能帮助你解决问题。如果问题仍然存在,请提供更多详细的错误信息,以便我们能够更好地帮助你。

http://t.csdn.cn/k55f9

你去这里看看

解决办法:

1、🍁进入redis-7.0.9/deps目录
2、🍁执行命令:make hiredis jemalloc linenoise lua
3、🍁再次执行命令: make MALLOC=libc

参照这篇文章安装一下,查看一下你的linux中gcc版本是否符合要求 https://daencode.blog.csdn.net/article/details/132259678

【以下回答由 GPT 生成】

这个编译错误提示了多个文件定义了SDS_NOINIT,导致了冲突。解决这个问题的方法是在Redis的源代码中修改src/sds.h文件来避免重复定义。

你可以按照以下步骤来修改源代码并重新编译Redis:

  1. 打开终端并进入Redis源代码所在的目录。

  2. 使用文本编辑器打开src/sds.h文件。

  3. 在文件中搜索SDS_NOINIT

  4. 在发现的每个定义中,添加extern关键字,以将其声明为外部变量。代码示例如下:

extern const struct sdshdr sdsHdrNoInit;
  1. 保存并关闭文件。

  2. 回到命令行终端,执行以下命令重新编译Redis:

make clean
make

这些步骤将会修复冲突并重新编译Redis。如果还遇到其他错误,请提供更多详细信息以便我能够提供进一步的帮助。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

可以参考本人整理的文章,所有Linux安装软件都有,包括redis
https://blog.csdn.net/qi_ming88/article/details/132274815