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:
注意:替换上述路径为你Nix环境中实际的GLIBC库路径,可通过命令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-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
相关产品推荐
相关产品推荐

