You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redhat环境下构建librabbitmq RPM包时出现File not found by glob错误,如何修正Makefile中的install命令?

解决RPM构建时找不到librabbitmq.so.1*的问题

看了你的报错和配置文件,问题根源很明确:当前Makefile生成的是静态库,但RPM spec里要求的是带版本号的共享库文件,而且install步骤也没按RPM的规范安装版本化的库文件。下面一步步给你修正:

一、修改Makefile生成符合要求的共享库

1. 更新核心变量定义

先把库名改成带版本号的格式,同时定义共享库需要的软链接名称:

# 带完整版本的主共享库文件
NAME= librabbitmq.so.1.0.0
# 对应SONAME的软链接(spec里要的.so.1就是这个)
SONAME= librabbitmq.so.1
# 开发用的无版本软链接(给devel包用)
DEV_LINK= librabbitmq.so

2. 替换链接规则,生成共享库

原来的ar rcs是生成静态库的命令,要换成gcc编译共享库的命令,同时指定SONAME:

$(NAME):$(OBJS)
	# 编译生成共享库,指定SONAME参数(这是版本化共享库的关键)
	$(CC) $(CFLAGS) $(INCLUDES) -shared -Wl,-soname,$(SONAME) -o $(NAME) $(OBJS) $(LIBS)
	# 创建两个软链接,对应不同用途
	ln -sf $(NAME) $(SONAME)
	ln -sf $(SONAME) $(DEV_LINK)

3. 修正install规则,安装所有必要文件

现在要把主库、两个软链接,以及头文件都安装到对应路径(你的spec里devel包需要头文件,之前的Makefile没处理):

prefix:=/usr/local
install: $(NAME)
	# 确保目标目录存在
	mkdir -p $(prefix)/lib64
	mkdir -p $(prefix)/include
	# 安装主库文件(带完整版本)
	install -m 755 $(NAME) $(prefix)/lib64
	# 安装SONAME软链接(spec里找的就是这个)
	ln -sf $(NAME) $(prefix)/lib64/$(SONAME)
	# 安装开发用软链接(给devel包)
	ln -sf $(SONAME) $(prefix)/lib64/$(DEV_LINK)
	# 安装头文件(满足devel包的文件要求)
	install -m 644 rabbitmq.h $(prefix)/include

4. 更新clean规则,清理所有生成的文件

把新增的共享库和软链接都加入清理列表:

clean:
	$(RM) *~ $(NAME) $(SONAME) $(DEV_LINK)
	$(RM) -r $(OBJDIR)

二、验证修改效果

先执行本地编译安装,确认文件生成正确:

make clean && make && make install

检查/usr/local/lib64目录下,应该有这三个文件:

  • librabbitmq.so.1.0.0(主库文件)
  • librabbitmq.so.1(SONAME软链接)
  • librabbitmq.so(开发用软链接)
    同时/usr/local/include下要有rabbitmq.h。

三、可选:优化SPEC文件(更符合RHEL规范)

你的SPEC里定义了%define _prefix /usr/local,虽然能用,但RHEL默认的库路径是/usr/lib64,可以去掉这个定义,让RPM用默认前缀,这样更符合系统规范:

# 删掉这一行,用默认的/usr前缀
# %define _prefix /usr/local

做完这些修改后,再执行rpmbuild -ba librabbitmq.spec,应该就能顺利通过文件检查了。


内容的提问来源于stack exchange,提问作者Electrob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 11:14:08