降级 Erlang/OTP 后加载/重新编译钢筋模块



我希望使用erlang客户端库与我的一个项目的mqtt代理进行通信。所以我使用 rebar3 的内置模板启动了一个应用程序,并添加了 emqttc 作为依赖项。由于 erlang/otp 21 不支持 gen_logger(emqttc 取决于gen_logger(,并且tuple_calls编译器选项不够,我不得不根据这篇文章降级到 erlang@20。

现在降级 erlang 的问题是,rebar3 的命令(clean/compile/shell/report 等(都没有按预期工作,我以前使用 rebar3 构建的项目无法编译,我看到以下错误消息:

=错误报告==== 21-Aug-2018::12:54:29 === 加载/usr/local/bin/rebar3/rebar/ebin/rebar3.beam 失败: 错误文件脚本: 异常错误:函数中未定义函数 rebar3:main/1 escript:run/2 (escript.erl, line 759( in call from escript:start/1 (escript.erl,第 277 行(在 init 的调用中:start_em/1 在调用中来自 初始化:do_boot/3

=错误报告==== 2018 年 8 月 21 日::12:54:29 === 梁/beam_load.c(1863(:加载模块钢筋时出错3:此 BEAM 文件是为以后编译的 运行时系统的版本超过 20。 要解决此问题,请 使用 20 编译器重新编译此模块。 (使用操作码 160;此 模拟器最多仅支持 159 个。

我已经卸载并重新安装了 rebar3,在网上查找了这个,但没有明确和特定于钢筋的内容。任何这方面的帮助将不胜感激。

这可能不是您问题的确切答案。但它可能会给你和想法。

使用Docker怎么样。这是保持环境清洁整洁的简单方法。

如果你使用 docker,你只需要在Dockerfile中包含新的 erlang 版本作为环境变量。

ENV OTP_VERSION="20.3.6"

Check your_build/prod/rel/YOURAPPNAME/directory.很可能它有一个与您的 erlang 版本不匹配的版本。您可以安全地删除此目录并使用 rebar3 编译重建

最新更新