安装emacs-plus@28 with native-comp时如何先安装libgccjit?

在mac下安装emacs-plus@28 with native-comp 命令如下:

brew install emacs-plus@28 --with-dragon-icon --**with**-dbus --**with**-xwidgets --**with**-imagemagick --**with**-native-comp --with-ctags --with-debug

出现错误:Please try installing libgccjit 看到有人介绍:可以 brew edit gcc, 在 languages 里加上 jit, args 里添加 --enable-host-shared, 然后再 brew install gcc。 在终端中brew edit gcc看到如下:如何在终端下添加jit?在终端下好像不能输入和更改? languages = %w[c c++ objc obj-c++ fortran]

哪里不能改?不能改就是你权限不够,用 root 一把梭。

现在安装 libgccjit 的方法就是 brew install libgccjit

过时的老教程就别看了

1 个赞

按照上面的brew edit gcc后,brew install -s gcc出现下面的错误:

==> make install DESTDIR=/private/tmp/gcc-20221204-15208-1qg45lw/gcc-12.2.0/buil
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /opt/homebrew
Could not symlink include/libgccjit++.h
Target /opt/homebrew/include/libgccjit++.h
is a symlink belonging to libgccjit. You can unlink it:
  brew unlink libgccjit

2.尝试用brew reinstall libgccjit 后

==> Pouring libgccjit-12.2.0.arm64_ventura.bottle.tar.gz
🍺  /opt/homebrew/Cellar/libgccjit/12.2.0: 14 files, 37.2MB

再安装emacs-plus@28 with native-comp 还是出现下面的问题:

configure: error: ELisp native compiler was requested, but libgccjit was not found.
Please try installing libgccjit or a similar package.

直接装不可以吗?我不用 native-compilation,不清楚为什么一个依赖项都要特殊技巧来安装。

其实我也碰到过这个问题,我觉得这根本是emacs-plus formula自己的问题。你自己下载源码包或者 clone 下来 configure 一点问题都没有。

native-comp 刚出的时候 brew 没有 libgccjit 打包,所以要自己改 gcc 的 formula 编译。这些教程现在都过时了。

直接brew install gcc libgccjit,后再安装emacs-plus@28 with native-comp也还是出现同样的问题。 libgccjit应该怎么安装?

我已经说了,你的 libgccjit 安装没有问题。这是 emacs-plus 打包的问题,或者又是 Homebrew 在整活。

我觉得安装过程必须要参考官方教程,使用过程倒是可以参考第三方教程。

尤其是 Emacs 的几个 brew formula 各个不一样,逼死选择困难症。

要么自己学习 brew 相关知识解决问题,要么干脆放弃 emacs-plus 用 emacs-head/emacs-mac,或者放弃 native-compilation。

我做了一下调试,估计还是 Homebrew 的锅。

如果用 brew configure ,那 configure 就找不到 brew(PATH 被重置了):

checking for brew... no

然而 configure 要用 brew 去找 libgccjit 的安装位置……

有没有什么解决方法?

我试了下,把 brew edit emacs-plus@28 把里面的 libgccjit ⇒ :recommended 改成 libgccjit ⇒ :build 就行了。

这个方法不是很可靠。还是自己改 CFLAGS 和 LDFLAGS 吧。

echo "-L$(dirname $(brew ls -v libgccjit | grep -m1 -E 'libgccjit\.(so|dylib)$'))"
结果记为 xxx

echo "-I$(dirname $(brew ls -v libgccjit | grep libgccjit.h))"
结果记为 yyy

然后在 brew edit 里加上

    ENV.append "MAC_LDFLAGS", "替换成xxx"
    ENV.append "MAC_CFLAGS", "替换成yyy"

当然,最正统的解决方法是给 emacs-plus 报 bug。

edit: 改用 MAC_CFLAGS 和 MAC_LDFLAGS。

按照你的方法编译成功。 出现下面的警告可以怎么解决?

Warning (comp): ld: warning: -undefined dynamic_lookup may not work with chained fixups Disable showing Disable logging

编译时的 warning 当他不存在就行,不影响正常使用

我一直使用 emacs-plus 很长时间了,没遇到你说的问题。libgcc 这些 brew 会通过依赖自己处理吧?我没有特别安装过那个。 你如果遇到问题可以去 emacs-plus 的 issue 页面提交问问吧?那边响应好像也挺快的。

1 个赞

我是直接 brew install emacs-plus --with-native-comp --with-xwidgets 的,直接成功 没有任何问题,我一直都使用最新release版本,不追求追master最新版

出现下面的错误如何解决?

fatal: unable to access 'https://github.com/emacs-mirror/emacs.git/': LibreSSL SSL_read: error:02FFF03C:system library:func(4095):Operation timed out, errno 60