dialyzer 无法识别 elixir 函数并出现错误:0:unknown_function

Posted

技术标签:

【中文标题】dialyzer 无法识别 elixir 函数并出现错误:0:unknown_function【英文标题】:dialyzer fails to recognise elixir functions with error :0:unknown_function 【发布时间】:2018-10-05 18:27:59 【问题描述】:

我在我的计算机上使用asdf 安装了elixir 1.7.2,包括elixir 和erlang otp 21。在我的项目混合文件中,我按照dialyzer github 的说明添加了最新的透析器候选版本

: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 这样的 elixir 内置函数

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

【问题讨论】:

【参考方案1】:

原来这个错误是由我安装elixir 时引起的,asdf 使用的是用erlang otp-20 预编译的版本。 dialyzer 尝试创建 plt 时,找不到使用 otp-21 编译的 elixir 1.7.2。

要解决此问题,请按照asdf/elixir github 上的说明安装使用 otp-21 预编译的 elixir - 感谢我找到解决方案的 elixir slack

asdf install elixir 1.7.2-otp-21

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

现在一切都应该按预期进行

【讨论】:

以上是关于dialyzer 无法识别 elixir 函数并出现错误:0:unknown_function的主要内容,如果未能解决你的问题,请参考以下文章

Laravel css 使用 elixir 函数在 xampp 上无法正常工作

intellij idea无法启动项目, 按钮是灰色的

这个Elixir函数中的(反向)赋值匹配有什么意义?

为什么Erlang Dialyzer在以下代码中找不到类型错误?

Dialyzer错过了类型规范的错误

为啥常见的 Erlang 应用程序(Common Test、Dialyzer、leex、yecc 等)在 `erl` shell 中不可用?