错误描述
neovim的nvim-treesitter插件所需tree-sitter-cli版本升级到了0.26
按照官方教程使用npm install tree-sitter-cli安装后,运行出现了以下错误
tree-sitter: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.39' not found (required by /home/jihx/.local/myapps/npm/node_modules/tree-sitter-cli/tree-sitter)
分析问题
系统是Debian12,使用ldd --version,查看当前系统glibc版本为2.36,不符合tree-sitter-cli运行的要求,查找资料有了几个思路:
1、升级系统版本到Debian13,为了一个软件升级整个系统改动太大,先不考虑。
2、源码重新编译tree-sitter-cli程序,也能得到在当前系统运行的程序,不过这软件是用rust开发,安装一个rust环境也很麻烦。
3、升级系统glibc版本,这样做风险太高可能会影响其他软件。
4、手动编译高版本glibc安装在自定义路径,针对tree-sitter-cli单独指定glibc依赖。
比较之后决定试试手动编译安装glibc
解决方案
编译安装glibc
下载解压glibc
访问glibc官网下载glibc源码,我选择的是2.39版本
tar -xvf glibc-2.39.tar.gz
cd glibc-2.39/
创建构建目录
mkdir build
cd build
配置编译选项
../configure --prefix=$HOME/.local/lib/glibc239
--prefix参数指定glibc安装路径- 如果配置失败提示缺少依赖,安装对应依赖即可
编译安装
make
make install
- glibc将被安装在当前用户home目录.local/lib/glibc239下
- make install需要用户有对应目录权限,有需要可以用sudo,我这里是当前用户目录可以不用
使用指定glibc
这里使用自定义启动脚本的方式来运行程序,还有一种方法是直接修改程序二进制来指定glibc路径,这种方法有需要再研究。
查看tree-sitter程序所需依赖
ldd tree-sitter 查看所需依赖,这些信息后面编写脚本指定程序运行依赖的时候会用到

通过上图可看到tree-sitter所需依赖:
- glibc
- /lib/x86_64-linux-gnu下的一些运行库
创建程序启动脚本
创建tree-sitter.sh
#!/bin/bash
# 自定义 glibc 路径
GLIBC_PATH="$HOME/.local/lib/glibc239"
# glibc对应程序链接器路径,后续会使用该动态链接器运行程序
LD_LOADER="${GLIBC_PATH}/lib/ld-linux-x86-64.so.2"
# tree-sitter所需依赖路径,第一条指定新安装的glibc路径,后面跟其他依赖路径
LIB_PATH="${GLIBC_PATH}/lib:/lib/x86_64-linux-gnu"
# tree-sitter 程序路径(替换为你的实际路径)
BIN_PATH="$HOME/.local/myapps/npm/node_modules/tree-sitter-cli/tree-sitter"# 使用glibc版本对应的程序连接器运行tree-sitter程序
exec "${LD_LOADER}" \--library-path "${LIB_PATH}" \"${BIN_PATH}" \"$@"
执行验证

能够打印版本号,程序运行成功,后续可以将该脚本加入环境变量替换掉原来的tree-sitter命令。
