emacs-28 编译错误

今天用emacs-28 分支和master分支编译都出错,有大佬知道是什么问题吗?Windows平台

Loading e:/gitrep/emacs/lisp/case-table.el (source)...

Loading e:/gitrep/emacs/lisp/international/charprop.el (source)...

Loading e:/gitrep/emacs/lisp/international/characters.el (source)...

Loading e:/gitrep/emacs/lisp/international/charscript.el (source)...

Loading e:/gitrep/emacs/lisp/international/emoji-zwj.el (source)...

Invalid read syntax: "Invalid character U+3FFF8F in character name", 1, 0

make[1]: *** [Makefile:868:bootstrap-emacs.pdmp] 错误 127

make[1]: 离开目录“/f/emacs29/build/src”

configure 选项

/e/gitrep/emacs/configure --with-native-compilation --without-dbus

make 选项

/e/gitrep/emacs/configure --with-native-compilation --without-dbus

我在Windows上遇到过几次类似的错误是因为使用 Git clone 源码时造成代码被修改。直接下载 zip 压缩的源码就不会有问题。

你试试看这样下载源码,点 Downlaod ZIP:

1 个赞

看起来emoji-zwj.el文件中有乱码,可以试试楼上的方法。

可能是 emacs 源代码在 clone 时换行格式转换成了 CRLF。

是的,可能是这个原因。
执行下面的命令可以临时关闭自动转CRLF,有时也能解决问题。

git config core.autocrlf false

奇怪的是,emoji-zwj.el 这个文件源代码里没有, 会不会是autogen 或 configure 生成的? 也许是我少装了什么组件导致没有办法解析吗?

这个不清楚,我这边就是按照官方仓库的说明安装好依赖就可以正常编译的。

你试过我上面说的方法吗?

emoji-zwj.el 是编译时生成的,你应该认真看看 configure 输出,有没有提示错误。

有可能是 awk 不兼容。

emoji-zwj.el: ${unidir}/emoji-zwj.el

zwj = ${srcdir}/emoji-zwj.awk

${unidir}/emoji-zwj.el: ${srcdir}/emoji-zwj-sequences.txt $(srcdir)/emoji-sequences.txt ${zwj}
	$(AM_V_GEN)$(AWK) -f ${zwj} $^ > $@

configure 是没有问题的,重装了gawk也不行,放弃了,查看change.log,这个文件是在21年9月份加入的,不知道是做什么用的,我退回到emacs28.0.5的版本可以编译成功了,先这样把,谢谢!

可能是新的 emoji-zwj-sequences.txt 增加了什么字符导致,对比看看。

或者直接在命令行转换试试:

gawk -f /path/to/old/emoji-zwj.awk /path/to/old/emoji-zwj-sequences.txt > old.el
gawk -f /path/to/new/emoji-zwj.awk /path/to/new/emoji-zwj-sequences.txt > new.el

然后 emacs -Q 分别加载这两个 .el 看看会不会出错。

emacs28.0.5 没有 emoji-zwj.awk 和 emoji-zwj-sequence.txt emacs29.0.5 使用命令生成 new.el 后,用emacs -q -load=new.el --debug-init 显示

eval-buffer: Invalid read syntax: "Invalid character U+3FFF8F in character name"

U+3FFF8F 是个无效的编码,对照 new.elemoji-zwj-sequence.txt 应该可以确定是哪个 emoji 转错了。

抱歉啊,有点超出我的能力了,没用过awk,看sequence.txt里好多不认识的字符 :rofl:

那两个文件不是 awk 脚本,都是 emoji 字符集。

搞定了,谢谢 我在wsl的ubuntu里用gawk 自己生成了emoji-zwj.el这个文件,把原来的文件替换掉就可以了,奇怪的是wsl里的gawk的转换是正常的,版本是5.0.1,而Ming64系统里的gawk是5.1.1,不知道是不是版本的问题…