我希望使用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尚无明确的针对性。任何帮助,将不胜感激。
答案 0 :(得分:0)
这可能不是您所提问题的确切答案。但这可能会给您和想法。
如何使用Docker。这是保持环境整洁的简便方法。
如果使用docker,则只需在Dockerfile
中包含新的erlang版本作为环境变量即可。
ENV OTP_VERSION="20.3.6"
答案 1 :(得分:0)
检查您的 _build / prod / rel / YOURAPPNAME /目录。最有可能是它的发行版与您的erlang版本不匹配。您可以安全地删除该目录并使用rebar3 compile重建