Ubuntu22.04编译Redis3.2遇linker输入文件未找到错误求助
解决Redis 3.2在Ubuntu 22.04编译Lua依赖的错误
错误原因
Redis 3.2的Makefile在Ubuntu 22.04这类新系统与新版GCC环境下,对目标架构的处理存在兼容性问题:原本应作为编译选项的x86_64被错误当成输入文件传递给编译器,再加上-c参数仅执行编译不链接,导致编译器报错找不到该"文件"。
修复步骤
1. 修改Makefile的架构配置
打开Redis源码根目录下的Makefile,找到架构相关的配置块:
ARCH := $(shell uname -m) ifeq ($(ARCH),x86_64) CFLAGS += -march=x86-64 endif
将其修改为:
ARCH := $(shell uname -m) ifeq ($(ARCH),x86_64) CFLAGS += -m64 endif
也可以直接注释掉整个架构判断块,新版GCC会自动识别目标架构。
2. 清理编译残留
执行命令清除已生成的中间文件:
make distclean
3. 重新编译
再次执行编译命令:
make MALLOC=libc
补充方案
如果上述修改仍未解决问题,可尝试为编译器指定旧版C标准兼容模式:
打开src/Makefile(Lua编译相关配置位于该文件),在CFLAGS定义行添加-std=gnu99,之后重复步骤2和3即可。
内容的提问来源于stack exchange,提问作者pan8863
相关产品推荐
相关产品推荐

