我写信是想看看你最近是否尝试过编译 Emacs。我想编译 emacs-25.1,但遇到了分段错误。如果你想知道我为什么要编译,或者我为什么在这里问,请继续阅读...
我今天升级到了 Ubuntu 16.10,emacs-24.5 仍在运行,但工具栏图标已不可见。经过大量谷歌搜索,我发现这个问题已经出现一段时间了,通常是 gtk+、桌面主题或 Emacs 本身的缺陷。最近的帖子似乎说 Emacs 代码中有一个错误,后来已经修复了(https://bugs.archlinux.org/task/48862)。
我想尝试一下 emacs25,看看那里是否修复了这个问题。很多人建议使用这里提供的 repo,(debhttp://ppa.launchpad.net/adrozdoff/emacs/ubuntuyakkety main),然而 apt-get 拒绝了这个,原因我之前从未见过:
W: The repository 'http://ppa.launchpad.net/adrozdoff/emacs/ubuntu yakkety Release' does not have a Release file.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
我不介意编译程序,所以我会继续前进。
我的第一个想法是从该网站获取源 deb 打包,但尝试构建包时导致分段错误。
假设打包过程中出了问题,我尝试从源代码进行构建。但结果还是出现了同样的分段错误:
$ wget http://ftp.gnu.org/gnu/emacs/emacs-25.1.tar.gz
$ tar xzvf emacs-25.1.tar.gz
$ cd emacs-25.1
$ ./configure --prefix=/usr/local
$ make
几千行之后,我得到了重建包时看到的相同段错误
Loading emacs-lisp/eldoc...
Loading cus-start...
Loading tooltip...
Loading /home/pauljohn/LinuxDownloads/Ubuntu/sources/emacs/emacs-25.1/lisp/leim/leim-list.el (source)...
Finding pointers to doc strings...
Finding pointers to doc strings...done
Dumping under the name emacs
Makefile:736: recipe for target 'bootstrap-emacs' failed
make[1]: *** [bootstrap-emacs] Segmentation fault (core dumped)
make[1]: Leaving directory '/home/pauljohn/LinuxDownloads/Ubuntu/sources/emacs/emacs-25.1/src'
Makefile:398: recipe for target 'src' failed
make: *** [src] Error 2
在谷歌上搜索错误消息时,我没有找到解决方法。当然,随着时间的推移,我确实发现了很多 emacs 段错误,但它们通常会提供更具信息性的消息。我思考提到 Makefile:736 是指 src 目录中的 Makefile:
bootstrap-emacs$(EXEEXT): temacs$(EXEEXT)
$(MAKE) -C ../lisp update-subdirs
ifeq ($(CANNOT_DUMP),yes)
ln -f temacs$(EXEEXT) $@
else
$(RUN_TEMACS) --batch --load loadup bootstrap
ifneq ($(PAXCTL_dumped),)
$(PAXCTL_dumped) emacs$(EXEEXT)
endif
mv -f emacs$(EXEEXT) $@
endif
我已经很久没有遇到过这种情况了。
我找到了有关过去构建 Emacs 时出现段错误的页面
1https://bbs.archlinux.org/viewtopic.php?id=197841。Arch Linux 中安装了一个“hardening”包,Emacs 也因此失败。我发现我有一个来自 Ubuntu 16.10 的“hardening-includes”包,我删除了它,看看结果是否会改变。没有!
2 https://lists.gnu.org/archive/html/bug-gnu-emacs/2015-04/msg00371.html。有一个错误的编译器标志。我没有该标志。
3http://emacs.1067599.n8.nabble.com/bug-20190-Building-emacs-24-4-against-GCC-5-0-td352965.html说环境标志是罪魁祸首。我没有这个标志。
Emacs 错误报告流程(https://debbugs.gnu.org/Emacs.html) 对我来说,确实有点难。我不知道如何提交新的 bug。
我上传了整个 configure/make 输出以供参考:
http://pj.freefaculty.org/scraps/emacs-build-fail-20161013.txt
答案1
休息了一会儿后,我发现这个问题在 Yakkety Yak 发布之前就被发现了,但修复程序并未包含在软件包中。如果你看看这里
https://bugs.launchpad.net/ubuntu/+source/emacs24/+bug/1623585
您应该在结尾处找到我的帖子,其中说我确实重建了他们提到的软件包源,并且我可以确认它确实构建了并且 Emacs 工具栏图标将重新出现。
答案2
出于完整性考虑,emacs 25 无法在 Ubuntu 16.10 下正确构建的原因似乎是由于 Ubuntu 16.10 上 gcc 使用的默认标志发生了变化。要使 emacs 能够构建,您需要将 -no-pie 添加到标志中。以下方法有效:
$ ./autogen.sh
$ ./configure CFLAGS=-no-pie <other configure options>
直到 git repo 中有更新