emacs28.2在windows10下内存泄露问题

win10 上,安装了所有需要的依赖,前面两步都没有出错,编译时出现以下错误。官方源码和github上的源码都试过了,均出现以下同样的错误。我的编译环境都是按照链接 GccEmacs 在各个平台上的安装 - Eason Huang 中介绍的设置的,python版本为 3.10.5。

# make -j$(nproc) NATIVE_FULL_AOT=1
make -C nt all
make -C lib all
make -C doc/lispref info
make[1]: Entering directory '/d/Cat/emacs-build-windows/emacs-emacs-28/nt'
make -C doc/lispintro info
make -C doc/emacs info
make[1]: Entering directory '/d/Cat/emacs-build-windows/emacs-emacs-28/doc/lispref'
make[1]: Nothing to be done for 'info'.
make[1]: Leaving directory '/d/Cat/emacs-build-windows/emacs-emacs-28/doc/lispref'
make[1]: Entering directory '/d/Cat/emacs-build-windows/emacs-emacs-28/doc/lispintro'
make[1]: Nothing to be done for 'info'.
make[1]: Leaving directory '/d/Cat/emacs-build-windows/emacs-emacs-28/doc/lispintro'
  RC       emacs.res
make[1]: Entering directory '/d/Cat/emacs-build-windows/emacs-emacs-28/doc/emacs'
make[1]: Nothing to be done for 'info'.
make[1]: Leaving directory '/d/Cat/emacs-build-windows/emacs-emacs-28/doc/emacs'
  CCLD     addpm.exe
  CCLD     cmdproxy.exe
  CCLD     ddeclient.exe
make[1]: Entering directory '/d/Cat/emacs-build-windows/emacs-emacs-28/lib'
  GEN      alloca.h
  GEN      byteswap.h
  GEN      errno.h
  GEN      execinfo.h
  GEN      getopt.h
  CCLD     runemacs.exe
  GEN      getopt-cdefs.h
  GEN      ieee754.h
  GEN      limits.h
  GEN      string.h
  GEN      stdint.h
  GEN      time.h
  GEN      sys/random.h
  CC       fingerprint.o
  CC       acl_entries.o
  CC       execinfo.o
  CC       fpending.o
  CC       getopt1.o
  CC       getopt.o
  CC       getrandom.o
  CC       gettimeofday.o
  CC       memmem.o
  CC       memrchr.o
  CC       mkostemp.o
  CC       mktime.o
  CC       regex.o
  CC       sig2str.o
  CC       sigdescr_np.o
  CC       stpcpy.o
  CC       time_r.o
  CC       time_rz.o
  CC       timegm.o
  CC       binary-io.o
  CC       c-ctype.o
  CC       c-strcasecmp.o
  CC       c-strncasecmp.o
  CC       close-stream.o
  CC       count-leading-zeros.o
  CC       count-one-bits.o
  CC       count-trailing-zeros.o
  CC       md5-stream.o
  CC       sha256.o
  CC       dtoastr.o
  CC       md5.o
  CC       sha512.o
  CC       sha1.o
D  CC       dtotimespec.o
:/msys64/mingw64/bin/../lib/gcc/  CC       malloc/dynarray_at_failure.o
x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe
: D:\msys64\tmp\ccQwloJt.o: in function `main':
D:\Cat\emacs-build-windows\emacs-emacs-28\nt/cmdproxy.c:871: undefined reference to `_snprintf'
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe
: D:\Cat\emacs-build-windows\emacs-emacs-28\nt/cmdproxy.c:878: undefined reference to `_snprintf'
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe
: D:\Cat\emacs-build-windows\emacs-emacs-28\nt/cmdproxy.c:889: undefined reference to `_snprintf'
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe
: D:\Cat\emacs-build-windows\emacs-emacs-28\nt/cmdproxy.c:916: undefined reference to `_snprintf'
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe
: D:\Cat\emacs-build-windows\emacs-emacs-28\nt/cmdproxy.c:923: undefined reference to `_snprintf'
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe
: D:\msys64\tmp\ccQwloJt.o:D:\Cat\emacs-build-windows\emacs-emacs-28\nt/cmdproxy.c:928: more undefin
ed references to `_snprintf' follow
collect2.exe: error: ld returned 1 exit status
make[1]: *** [Makefile:231: cmdproxy.exe] Error 1
make[1]: *** Waiting for unfinished jobs....
  CC       malloc/dynarray_emplace_enlarge.o
  CC       malloc/dynarray_finalize.o
  CC       malloc/dynarray_resize.o
  CC       malloc/dynarray_resize_clear.o
  CC       filemode.o
  CC       filevercmp.o
  CC       gettime.o
  CC       nstrftime.o
  CC       qcopy-acl.o
  CC       stat-time.o
  CC       tempname.o
  CC       timespec.o
  CC       timespec-add.o
  CC       timespec-sub.o
  CC       u64.o
make[1]: Leaving directory '/d/Cat/emacs-build-windows/emacs-emacs-28/nt'
make: *** [Makefile:436: nt] Error 2
make: *** Waiting for unfinished jobs....
  AR       libgnu.a
make[1]: Leaving directory '/d/Cat/emacs-build-windows/emacs-emacs-28/lib'


现在卡到这里了!请大佬有空的时候帮忙解惑!

运行的也是最新版 MSYS2 MinGW x64

建议楼主先在命令行里面运行 emacs -Q --debug-init 或者 runemacs -Q --debug-init 启动emacs,把你贴出来的配置在scratch buffer里面eval一下再试试,有可能是配置文件里面其他东西导致的。

(话说歪楼了。。

我这目前没 Windows10,在 Windows 11 上尝试编译 emacs 28.2, 一切正常。

用的github 的最新源码:https://github.com/emacs-mirror/emacs/archive/refs/heads/emacs-28.zip

你试下也用上面这个链接下载。

另外在 mingw64 中执行 pacman -Syu 更新下系统。

三楼就开始歪了, :joy:
不过也不完全歪,我正编译 28.2,看看是否有内存泄露。

楼主如果 emacs -q 能复现的话,建议 M-x report-emacs-bug 给 emacs 报 Bug。

2 个赞

好的👌🏻我试试,感谢!

我使用官网下载的 Emacs 28.2 和 自己编译的 Emacs 28.2.50 ,在 Windows 11 上按楼主的方式安装 use-package,并没有遇到内存泄漏。

只是第一次启动以及安装完成 use-package 时内存占用稍微提高一点,这是因为正在编译 eln。

可能是跟操作系统环境有关,建议楼主如果有问题就直接报 Bug 吧。

第一次启动 Emacs 时,因为后台正在编译 eln,也会造成内存飙高。不了解 native-compilation 的用户其实很容易误认为 Emacs 出问题了。个人觉得 native-comp 不应该默认就开启,如果默认开启,应该提供NATIVE_FULL_AOT=1 的版本,或者后台正在编译的话,应该有提示信息。

如下图,是我启动 Emacs 后,第一次执行 M-x org-mode 的结果,会触发一堆内置包开始编译 eln。这个时候,emacs 是异常卡顿,处在无法使用的状态的。

谢谢! 我用debug再试试!

默认开启真是不友好。

谢谢! 我已经切回27.2了。 我换回28.2 debug一下再看看。

我至今都无法在 windows 上使用 28 及以上版本,eln编译完后,重新打开emacs就是永远闪退打不开emacs,只有删除了 eln 文件夹才能启动,又要编译。。无限循环,无法使用

确实,这样会吓退很多新人,不是所有人都需要 native-compilation的。

内存狂飙,emacs无响应! 看了一下ivy插件目录,没有elc文件,感觉是正在编译el文件,死这里了。

又试了下,还是不行,可能和操作系统有关,emacs的版本和你的是一样的,我的系统是windows10 家庭版。 感觉是死在了编译el文件上。插件下载下来没有生成elc文件。emcas卡死了不能M-X report-emacs-bug 吧。

删除 .emacs.d 文件夹,然后启动 Emacs,接着随便打开一个 abc.org 文件. 这时Emacs估计会在编译eln。你 C-x b *Async-native-compile-log* 进入这个 buffer,看看是否在编译。截图看看。