在降级Erlang / OTP

时间:2018-08-21 07:57:28

标签: erlang rebar3

我希望使用erlang客户端库与我的一个项目的mqtt代理进行通信。因此,我使用rebar3的内置模板启动了一个应用程序,并添加了emqttc作为依赖项。由于erlang/otp 21 does not have support for gen_logger(emqttc取决于gen_logger)并且tuple_calls编译器选项不足,因此我不得不根据this post降级到erlang @ 20。

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

  

=错误报告==== 2018年8月21日:: 12:54:29 ===加载/usr/local/bin/rebar3/rebar/ebin/rebar3.beam失败:badfile escript:   异常错误:函数中的未定义函数rebar3:main / 1   来自escript:start / 1的调用中的escript:run / 2(escript.erl,第759行)   (escript.erl,第277行)来自init的调用:start_em / 1来自   初始化:do_boot / 3

     

=错误报告==== 2018年8月21日:: 12:54:29 === beam / beam_load.c(1863):加载模块rebar3时出错:此BEAM文件已为以后的版本进行编译   版本20之前的版本。要解决此问题,请   用20编译器重新编译该模块。 (使用操作码160;   仿真器最多仅支持159。)

我已经卸载并重新安装了rebar3,在网上查询了此内容,但对于rebar尚无明确的针对性。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

如何使用Docker。这是保持环境整洁的简便方法。

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

ENV OTP_VERSION="20.3.6"

答案 1 :(得分:0)

检查您的 _build / prod / rel / YOURAPPNAME /目录。最有可能是它的发行版与您的erlang版本不匹配。您可以安全地删除该目录并使用rebar3 compile重建