求助: 未找到 libtree-sitter-lang.dll

开启 go-ts-mode 会报

Warning (treesit): Cannot activate tree-sitter, because language grammar for go is unavailable (not-found): (libtree-sitter-go libtree-sitter-go.dll) No such file or directory

Emacs 是 FTP 上预编译的 v29.2; libtree-sitter-lang.dll 也是直接拿的 Eli 的 EZWinports 里预编译的.

Windows 默认的 HOME 在 AppData Roaming 路径下,你改了配置的位置,不清楚怎么修改和怎么影响的,我估计结果默认还是只会在那里找 parser。

设置 treesit-extra-load-path 变量应该可以解决。

我手动修改过 HOME, 是 c:/Users/shynur, 这个肯定没问题, 不然都没法正常加载 init 文件.

刚才又设置了

(setq treesit-extra-load-path '(("c:/Users/shynur/.emacs.d/tree-sitter/")))

还是不行😭

这个应该是只要一层括号吧

哦不好意思, 回帖手打多写了层括号, 测试的是一层:

我看了下具体实现的代码,dynlib_open() 用的是 LoadLibraryW(),觉得很有可能是因为 Windows 的 LoadLibraryW() 在加载的 DLL 存在但是 DLL 本身依賴的其它 DLL 找不到时也会报找不到 DLL 导致的。

EZWinports 的 README 有写需要另外安装 DLL,你是不是没有装上?

Warning: all the ports produced since the year 2021 onwards depend on the libgcc DLL, and some depend on libstdc+±6.dll, which are not provided in the zip files. For the reasons, see below. If you don’t have these DLLs on your system, you can download them from this site:

https://osdn.net/projects/mingw/releases

Specifically, download and install these two archives:

https://osdn.net/projects/mingw/downloads/72215/libgcc-9.2.0-3-mingw32-dll-1.tar.xz/ https://osdn.net/projects/mingw/downloads/72210/libstdc%2B%2B-9.2.0-3-mingw32-dll-6.tar.xz/

libstdc++-6.dll 附带在 Emacs 里

libgcchttps://osdn.net/projects/mingw/downloads/72215/libgcc-9.2.0-3-mingw32-dll-1.tar.xz/ 下载, 解压出 libgcc_s_dw2-1.dll, 放到了 c:/Program Files/Emacs/bin/ 目录下, 还是不行; 把名字改成了 libgcc.dll 也不行.

鼠鼠我打算放弃了🤡

那我觉得原因可能更离谱了,是系统安全设置搞得鬼,你要不试试写个 C 程序手动加载 dll 能不能用

我这没问题,有两个办法测试
1 像我这样挂个调试器
2 用api-monitor,监控LoadLibraryW的调用

请问你的Emacs是FTP上下的预编译的吗?

我是自己编译的

试了下29.2,她默认路径是没问题的,你要不先看看默认路径,我这里报错是因为我没装

我知道为啥了,刚刚从你说的链接下载了treesitter dll,用 api monitor监控可以看到如下报错

看下程序属性 她编译好的是32位的dll,用64位的emacs去加载,肯定就不行吧

1 个赞

想不到 Eli 浓眉大眼还在用 32 位 Emacs

在网上随便找了个 https://corwin.bru.st/emacs-tree-sitter/, 这次好像是可以用的