开启 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 导致的。
Lisp_Object error_list = Qnil;
tail = path_candidates;
error = NULL;
handle = NULL;
FOR_EACH_TAIL (tail)
{
char *library_name = SSDATA (XCAR (tail));
dynlib_error ();
handle = dynlib_open (library_name);
error = dynlib_error ();
if (error == NULL)
break;
else
error_list = Fcons (build_string (error), error_list);
}
if (error != NULL)
{
/* Yes, the error message list gets a bit verbose, but those
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 里
libgcc
从 https://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的调用
试了下29.2,她默认路径是没问题的,你要不先看看默认路径,我这里报错是因为我没装
我知道为啥了,刚刚从你说的链接下载了treesitter dll,用 api monitor监控可以看到如下报错
看下程序属性
她编译好的是32位的dll,用64位的emacs去加载,肯定就不行吧
1 个赞
想不到 Eli 浓眉大眼还在用 32 位 Emacs