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

LunarVim在Nix环境中Haskell Language Server启动失败问题求助

解决Haskell Language Server的GLIBC版本不兼容问题

问题根源确认

是的,日志中的错误就是导致LSP无法启动的直接原因。GLIBC_ABI_DT_RELR是GLIBC 2.35及以上版本引入的ABI特性,而LinuxMint 21默认搭载的GLIBC版本(2.35)低于Nix环境中依赖的GLIBC 2.37版本,导致动态库加载时出现版本不兼容,Haskell Language Server(HLS)启动失败。

解决方案

方案1:改用Nix管理的HLS(推荐)

既然你的开发环境基于Nix,直接用Nix包中的HLS替代Mason安装的版本:

  • 在你的Nix配置文件(如shell.nix或flake.nix)中添加haskell-language-server依赖
  • 重新进入Nix环境后,LunarVim会自动识别PATH中的HLS,无需再依赖Mason管理的版本

方案2:为Mason的HLS指定Nix的GLIBC库

如果必须使用Mason安装的HLS,可通过设置环境变量让它加载Nix提供的高版本GLIBC:

  • 在LunarVim的Lua配置中修改HLS的启动命令,指定LD_LIBRARY_PATH:
    local lspconfig = require('lspconfig')
    lspconfig.hls.setup({
      cmd = {
        "env",
        "LD_LIBRARY_PATH=/nix/store/x33pcmpsiimxhip52mwxbb5y77dhmb21-glibc-2.37-8/lib",
        vim.fn.expand("$HOME/.local/share/lvim/mason/packages/haskell-language-server/lib/haskell-language-server-2.4.0.0/bin/haskell-language-server-9.2.8")
      },
    })
    
    注意:替换上述路径为你Nix环境中实际的GLIBC库路径,可通过命令nix-shell -p glibc --run "echo $(dirname $(realpath $(which ld)))/../lib"获取准确路径

方案3:升级系统GLIBC(不推荐)

LinuxMint 21的系统GLIBC版本与系统组件深度绑定,强行升级可能引发系统稳定性问题,不建议采用此方法。

后续排查(若上述方案无效)

  • 直接在终端运行HLS可执行文件,查看是否有其他错误输出:
    $HOME/.local/share/lvim/mason/packages/haskell-language-server/lib/haskell-language-server-2.4.0.0/bin/haskell-language-server-9.2.8 --version
    
  • 确认Nix环境是否正确加载:运行which haskell-language-server,检查输出是否指向Nix存储路径中的版本
  • 对比两台设备的Nix版本:运行nix --version,确保版本一致,不一致则升级到相同版本
  • 检查LunarVim的LSP配置,确保没有其他冲突的设置覆盖HLS的启动命令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:43:17