透析器无法识别带有错误:0:unknown_function的长生不老药功能

时间:2018-10-05 18:28:00

标签: elixir dialyzer asdf-vm

我在使用asdf的计算机上安装了elixir 1.7.2,其中包括elixir和erlang otp21。在我的项目混合文件中,我按照dialyzer github的指示添加了透析器的最新候选版本< / p>

{:dialyxir, "~> 1.0.0-rc.3", only: [:dev], runtime: false} 

当我运行mix dialyzer时,在其中创建plt时遇到了一些错误:

Could not get Core Erlang code for: /home/sigu/.asdf/installs/elixir/1.7.2/lib/elixir/ebin/elixir_parser.beam

Recompile with +debug_info or analyze starting from source code  Could not get Core Erlang code for: /home/sigu/.asdf/installs/elixir/1.7.2/lib/logger/ebin/Elixir.Logger.ErlangHandler.beam

然后一切都失败,并出现错误,包括System.get_env/1之类的内置长生不老药

:0:unknown_function
Function System.get_env/1 does not exist.

1 个答案:

答案 0 :(得分:3)

原来,该错误是由以下事实引起的:当我安装elixir时,asdf使用的是用erlang otp-20预编译的版本。当透析器尝试创建plt时,无法找到用otp-21编译的elixir 1.7.2。

要解决此问题,请按照asdf/elixir github的说明安装用otp-21预编译的elixir-多亏了elixir松弛,我找到了解决方法

asdf install elixir 1.7.2-otp-21

命令将安装用otp-21预编译的elixir。

一切都应该按预期进行