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

ejabberd 24.06编译依赖报错及make无编译文件名输出求助

问题1:ejabberd 24.06依赖编译时rebar抛出function_clause错误

错误原因

错误源于override_deps_versions2插件的逻辑缺陷,第14行的函数无法处理[{unicode_util_compat,"~>0.7.0"}]这种参数结构,触发了Erlang的函数子句不匹配错误。结合前置版本警告,推测是插件在处理版本约束时,对参数格式的预期与实际传入内容不匹配。

解决方法

  1. 临时绕过插件:打开ejabberd-src/rebar.config,找到加载override_deps_versions2插件的配置行并注释,之后重新执行./rebar compile。
  2. 修复插件代码:编辑ejabberd-src/plugins/override_deps_versions2.erl第14行的update_deps函数,调整lists.map的处理逻辑,确保能正确接收[{Name, Version}]格式的参数。示例修改:
    update_deps(Deps) ->
        lists:map(fun({DepName, DepVersion}) ->
                        % 保留原有版本覆盖逻辑
                        {DepName, DepVersion}
                  end, Deps).
    
  3. 切换官方推荐构建工具:ejabberd 24.06已默认使用Mix构建,直接执行mix compile替代./rebar compile,可规避插件兼容性问题。

问题2:ejabberd 24.06执行make时不输出具体编译文件名

原因

ejabberd 24.06采用Mix作为默认构建工具,而ejabberd 21使用的是Rebar。Mix的compile命令默认输出风格简洁,仅显示编译文件数量;Rebar的编译逻辑则默认会输出每个编译文件的具体路径。

解决方法

  1. 手动启用详细输出:执行mix compile --verbose,即可查看具体编译的每个文件名。
  2. 修改Makefile永久生效:打开源码根目录的Makefile,找到调用mix compile的行,修改为mix compile --verbose,后续执行make时将自动输出详细编译信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:13:12