安装步骤参考资料:
Emacs 29 introduces tree-sitter support, a powerful parsing library that enhances its understanding of source code. With this integration, Emacs gains features like precise syntax highlighting, accurate indentation and easier extensibility. Here's...
环境:CentOS 8
安装版本:emacs 29
1. 先安装 tree-sitter
git clone [email protected] :tree-sitter/tree-sitter.git
cd tree-sitter/
make
make install
安装成功:
$ tree-sitter
tree-sitter 0.20.8
make以后so文件目录在
/usr/local/lib
文件:ls
-rw-r–r-- 1 root root 272K Jan 25 18:06 libtree-sitter.a
lrwxrwxrwx 1 root root 21 Jan 25 18:06 libtree-sitter.so → libtree-sitter.so.0.0
lrwxrwxrwx 1 root root 21 Jan 25 18:06 libtree-sitter.so.0 → libtree-sitter.so.0.0
-rwxr-xr-x 1 root root 207K Jan 25 18:06 libtree-sitter.so.0.0
2. 源码安装emacs
问题:
configure: error: The following required libraries were not found:
tree-sitter
Maybe some development libraries/packages are missing?
To build anyway, give:
–with-tree-sitter=ifavailable
as options to configure.
实际上,经过步骤1,已经安装 tree-sitter 了。
libtree-sitter.so (或者类似名称的动态库)在 /usr/… 的哪个位置呢
感谢提示。已补充到问题中了哈。
在目录:/usr/local/lib
可以软链接到 /usr/lib 中
或者编译 emacs 时添加 /usr/local/lib 到 LD_LIBRARY_DIR,不过我没试过
ln -s /usr/local/lib/libtree-sitter.so.0.0 /usr/lib
以后还是报同样的错误。我再试试其他办法。感谢帮忙~
…
.so 后缀的 symlink 呢,而不是 .0.0 的
一样的结果哈。实际libtree-sitter.so应该软链到libtree-sitter.so.0.0的。
configure 检查的是头文件在哪里,你贴动态库位置又没用
ln -s /usr/local/lib/libtree-sitter.so.0.0 /usr/lib/libtree-sitter.so
ln -s /usr/local/lib/libtree-sitter.so.0.0 /usr/lib/libtree-sitter.so.0
没注意到你的 ln 参数,Emacs 靠 libtree-sitter.so
这个名字识别是否有 tree-sitter,如果不加上后一条,在 configure 时不会有问题,但编译时会出问题。
我在 Ubuntu 上试了下,最新版的 emacs 29.2 能够正常编译…
Siegel
2024 年1 月 26 日 03:15
12
发现有点不对,编译出来的tree-sitter版本和命令行里面的不是同一个版本。
后者是按照tree-sitter文档:
https://github.com/tree-sitter/tree-sitter/blob/master/cli/README.md
cargo install tree-sitter-cli
Siegel
2024 年1 月 26 日 03:17
13
不熟悉Linux哈。请教一下,有什么办法可以排查并修复这种configuer问题吗?感谢感谢~
LdBeth
2024 年1 月 26 日 03:54
14
你这个 tree-sitter
命令只是生成 parser 时用的构建工具,你不写 parser 的话是没用的,和 Emacs 实际要链接的 libtree-sitter 也没关系。
你应该看 /usr/local/include
里有没有 tree_sitter
路径,有的话运行 ./configure
时加上
./configure CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" <其它参数>
草,我一直以为你是这样操作的:
cd /usr/local/src
git clone https://github.com/tree-sitter/tree-sitter
sudo make
sudo make install
bash - How to add include and lib paths to configure/make cycle? - Stack Overflow 里面的方法,也就是 ldbeth 上面说的应该是标准做法,不过我没试过,等会去试试
Siegel
2024 年1 月 26 日 06:37
16
是这么操作的。只是遇到问题了,病急乱投医,就去看tree-sitter文档,就用rust的cargo安装了一遍cli工具。抱歉,我没说清楚。主要还是不熟悉,乱尝试。
yumore
2024 年1 月 31 日 16:48
18
我在内网编译emacs,也遇到了这个问题,我跟踪了下configure这个文件,发现是系统少了pkg-config,导致的。 我在arch下执行pacman -S pkg-config 安装后,再执行 *./configure --with-tree-sitter 就ok了。
有时间在 ubuntu 上编译了一下,按照标准方法安装的 tree-sitter 可被识别,编译参数如下(emacs 29.2, ubuntu 20):
./configure CFLAGS="-O2 -mtune=native -pipe -I/usr/local/include" LDFLAGS="-L/usr/local/lib" \
--with-json --with-tree-sitter --without-compress-install \
--with-native-compilation=no --with-mailutils