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

Ubuntu20.04编译带FIPS的RabbitMQ时找不到eunit.hrl的问题

解决编译RabbitMQ时找不到eunit/include/eunit.hrl的问题

问题根源

你从源码编译的Erlang大概率缺少eunit组件——eunit是Erlang/OTP的测试框架组件,RabbitMQ的依赖编译必须用到它。默认情况下Erlang编译会包含eunit,但如果编译时系统依赖缺失或配置选项做了限制,就可能跳过该组件的编译。

解决步骤

1. 验证Erlang是否已安装eunit

先检查你的Erlang安装目录下是否存在eunit库:

ls /usr/local/lib/erlang/lib | grep eunit
# 查看是否有类似 eunit-2.7.0 这样的目录
ls /usr/local/lib/erlang/lib/eunit-*/include/eunit.hrl

如果没有输出或提示文件不存在,说明你的Erlang确实没编译eunit,需要重新编译Erlang。

2. 重新编译带eunit的Erlang(保留FIPS支持)

进入之前的Erlang源码目录,重新执行编译流程,确保没有禁用eunit的配置:

# 清理之前的编译产物
make clean
# 重新配置,保留--enable-fips,默认启用eunit(无需额外指定,除非之前用了禁用选项)
./configure --enable-fips --prefix=/usr/local
# 编译并安装
make -j$(nproc)
sudo make install

注意:确保Ubuntu系统已安装Erlang编译的所有依赖,比如build-essential、libssl-dev、libncurses-dev等,缺失依赖可能导致组件编译失败。

3. 确认Erlang环境路径正确

确保系统优先使用你编译的Erlang,而非系统默认版本:

# 检查erl命令路径
which erl
# 应输出 /usr/local/bin/erl
# 验证eunit是否能被Erlang找到
erl -eval 'io:format("~p~n", [code:lib_dir(eunit)]).' -s init stop

如果命令返回eunit的安装路径,说明环境配置正确。

4. 重新编译RabbitMQ-server

回到RabbitMQ源码目录,清理之前的编译缓存后重新编译:

make clean
make

额外排查点

  • 如果重新编译Erlang后仍找不到eunit,检查编译日志中是否有关于eunit的错误信息,排查是否有依赖缺失导致编译失败。
  • 若ERL_LIBS变量已设置,确保其值包含/usr/local/lib/erlang/lib,不过正确安装的Erlang会自动识别这个路径,通常无需额外设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:45:27