You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何切换VSCode的Elixir-LS版本匹配本地Erlang/Elixir解决NIF问题

问题分析与解决方案

问题本质

你的NIF加载错误核心原因是Elixir-LS的运行环境和项目编译环境不兼容:

  • Elixir-LS 0.11.0基于Erlang 22编译,而你的iconv NIF是用本地Erlang 24编译的
  • NIF与Erlang/OTP版本强绑定,不同版本的Erlang无法加载彼此编译的NIF文件
  • mix test用的是本地Erlang 24环境,所以能正常加载;VSCode调试时是Elixir-LS的进程(基于Erlang 22)去加载项目代码,因此报错

关于Elixir-LS的编译问题

  1. 需编译的项目:
    直接编译官方的elixir-ls主项目即可,它包含了所有核心组件(language server、调试器等),不需要单独编译子项目。

  2. 是否必须重编译:
    是的,必须用你本地的Erlang 24.3.4.6和Elixir 1.14.1-otp-24重新编译Elixir-LS,让它的运行环境与项目编译环境完全匹配,才能解决NIF加载问题。

具体编译与配置步骤

  • 克隆Elixir-LS仓库,切换到v0.11.0标签(保持版本一致)
  • 在本地环境下执行编译命令:
    mix deps.get
    mix compile
    mix elixir_ls.release
    
  • 在VSCode设置中,找到ElixirLS: Server Path,设置为编译后生成的可执行文件路径:
    • Linux/macOS:{仓库目录}/release/language_server.sh
    • Windows:{仓库目录}/release/language_server.bat

额外说明

之前在launch.json中排除:iconv_app无法解决问题,因为调试器仍会加载项目的依赖代码,只有让Elixir-LS的运行环境版本与项目编译环境一致,才能从根本上解决NIF加载不兼容的问题。

内容的提问来源于stack exchange,提问作者Chen Yu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:45:39