文档章节

终极解决方案:Emacs+Slime+Lisp启动错误:Polling "/tmp/slime.50

FreeBlues
 FreeBlues
发布于 2015/08/24 23:26
字数 1775
阅读 213
收藏 2

终极解决方案:Emacs+Slime+Lisp启动错误:Polling "/tmp/slime.5000 .. 25 (Abort with 'M-x slime-abort-connection'.) [730 times]"

目录

问题描述

在树莓派2上安装了 Emacs + Slime + CCL/SBCL/CLISP/ECL 开发环境,结果启动时总是在 minibuffer 区出现如下错误,很难连接成功:

Polling "/tmp/slime.5000 .. 25 (Abort with 'M-x slime-abort-connection'.) [730 times]

尝试搜索无果

搜到几种解决办法,但是貌似都不起作用

主要参考此文:[Emacs slime mini buffer take-over] (http://stackoverflow.com/questions/15141617/emacs-slime-mini-buffer-take-over),其中有人提供了4种解决办法,不过貌似都不起作用

1、在 ~/.emacs.d/ 目录下新建 tmp 目录,并在 .emacs 中增加设置:

(setq temporary-file-directory "/tmp")

2、清除掉 ~/.cache/common-lisp/

3、进入 slime 安装目录下的 /slime/contrib,删除其中的 elc 文件

cd /path/slime/contrib
find ./ -name '*.elc' | xargs rm -f

4、因为使用自动安装,导致缺少 swank-loader.lisp,手动下载将其拷贝到 slime 的对应目录下,具体描述如下:

http://iswwwup.com/t/1307c691a162/emacs-slime-mini-buffer-take-over.html
The infinite polling may be due to the missing of file swank-loader.lisp. Check the variable slime-backend to see whether it contains the right path to swank-loader.lisp.
On my computer I don't even have a swank-loader.lisp file(I noticed that if you install the slime using elpa, this may happen). So I downloaded the entire slime from here and got it right.

自力更生研究报错信息

看来取巧的办法是不存在的,最终还是得靠自己研究,先看看错误信息提示:

(progn (load "/usr/share/common-lisp/source/slime/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (fun\
 call (read-from-string "swank:start-server") "/tmp/slime.7434"))
2
3lisp kernel support for the ARM soft-float ABI has been deprecated

等等~~ 我在 .emacs 里设置的 slime 路径貌似不是这个啊!看看 .emacs 文件里的这个配置行:

;; 设置 slime 加载目录                                                                                                              
(add-to-list 'load-path "/opt/software/slime/")

恩,貌似有些明白了,上面的那个轮询提示是因为 slime 连接不到 swank 上,那么为什么连接不上?CCL 提示 slime 版本跟 swank 版本不一致(目前看来,还是 CCL 连接 slime 的错误提示最完全)。

在我的环境中 slime 最初是用这个命令安装的

sudo apt-get install slime

于是自动安装了一堆东西到 /usr/shar/common-lisp 下,包括旧版本的 slimecl-asdf 还有什么 common-lisp-controler,而且用下面两个文件指定了 slime 相关路径在这里

pi@raspberrypi /usr/share/common-lisp/source/common-lisp-controller $ ls -al
total 20
drwxr-xr-x 2 root root 4096 Aug 23 21:45 .
drwxr-xr-x 5 root root 4096 Aug 24 10:42 ..
-rw-r--r-- 1 root root 5808 Oct 23  2012 common-lisp-controller.lisp
-rw-r--r-- 1 root root 2956 Oct 23  2012 post-sysdef-install.lisp

正好刚才加载 ECL 时也提示 asdf 版本过旧,看来也可以一起试着解决一下

因为 emacs 的启动配置文件有多个,既有 ~/.emacs,也有 ~/.emacs.d/init.el,还有 emacs/site-lisp/ 下的文件,优先级我现在也记不太清楚了,所以导致我们修改了的文件配置在加载时被系统的默认配置给覆盖了,于是我们的配置就没起作用。

现在为了保证不会有多个修改源,后面下载回来的 slimecl-asdf 我们只保留一个实际拷贝,其他目录下对它们的使用都建立符号链接,命令为:ln -s 原始文件夹完整路径 目标位置完整路径

问题解决方案

既然貌似找到了原因,那就试着改改,先解决 minibuffer 始终显示 polling 而连接不起来的问题,那么就手动下载 slime 最新版

cd ~/
sudo git clone https://github.com/slime/slime slime
cd ./slime
sudo make
sudo ln -s /home/pi/slime /usr/share/common-lisp/source/slime

然后按照上面第2、第3所说的清除相关文件

再次运行

emacs 
M - - 
M - x 
slime
clisp

很好,编译一段时间后,连接成功, CLISP 下的 polling 信息消失了!

继续启动 CCLSBCL 检查,全部 ok!看来问题初步得到了解决。

  • 教训:需要相互配合使用的软件,比如 Emacs + Slime + Common Lisp 最好能自己独立下载安装,然后花点时间手动配置,否则用默认安装的话很可能会出现各种奇怪的问题。

ECL的小尾巴:

不过 ECL 还是继续报错,报错信息如下:

12;;; Loading "/usr/share/common-lisp/source/slime/swank-loader.lisp"
13;;; Loading #P"/usr/lib/ecl-11.1.1/cmp.fas"
14;;; Loading "/home/pi/.slime/fasl/2015-08-18/ecl-11.1.1-linux-arm/backend.fas"
15;;; Loading "/home/pi/.slime/fasl/2015-08-18/ecl-11.1.1-linux-arm/ecl.fas"
16;;; Loading #P"/usr/lib/ecl-11.1.1/sockets.fas"
17;;; Loading #P"/usr/lib/ecl-11.1.1/profile.fas"
18;;; Loading #P"/usr/lib/ecl-11.1.1/serve-event.fas"
19;;; Loading "/home/pi/.slime/fasl/2015-08-18/ecl-11.1.1-linux-arm/gray.fas"
20;;; Loading "/home/pi/.slime/fasl/2015-08-18/ecl-11.1.1-linux-arm/match.fas"
21;;; Loading "/home/pi/.slime/fasl/2015-08-18/ecl-11.1.1-linux-arm/rpc.fas"
22;;; Loading "/home/pi/.slime/fasl/2015-08-18/ecl-11.1.1-linux-arm/swank.fas"
23;;;
24;;; Compiling /usr/share/common-lisp/source/slime/contrib/swank-asdf.lisp.
25;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=3
26;;;
27;;; Loading #P"/usr/lib/ecl-11.1.1/asdf.fas"
28;;; Error:
29;;;   in file swank-asdf.lisp, position 2332
30;;;   at (UNLESS (OR #) ...)
31;;;   * The form (IF (NOT (OR (ASDF:VERSION-SATISFIES (ASDF:ASDF-VERSION) "2.14.6"))) (PROGN (ERROR "Your ASDF is too old. ~
32;;;             The oldest version supported by swank-asdf is 2.014.6."))) was not evaluated successfully.
33;;; Error detected:
34;;; Your ASDF is too old. The oldest version supported by swank-asdf is 2.014.6.;;
35;; Error while compiling /usr/share/common-lisp/source/slime/contrib/swank-asdf.lisp:
36;;   COMPILE-FILE returned NIL.
37;; Aborting.
38;;
39
40Restart ABORT is not active.
41
42Available restarts:
43
441. (RESTART-TOPLEVEL) Go back to Top-Level REPL.
45
46Broken at SWANK-LOADER::HANDLE-SWANK-LOAD-ERROR. In: #<process TOP-LEVEL>.
47 File: #P"/opt/software/slime/swank-loader.lisp" (Position #6091)
48>> 

那么就手动安装一次 cl-asdf

sudo apt-get install  https://gitlab.common-lisp.net/asdf/asdf.git cl-asdf 
sudo ln -s /opt/software/cl-asdf / /usr/share/common-lisp/source/cl-asdf

接着再把前面的临时文件清除一下

cd /usr/share/emacs/site-lisp/slime/contrib 
sudo find ./ -name '*.elc' | xargs rm -f

cd ~/.cache
mv common-lisp/ ./common-lisp-back

不过 ECL 貌似有多处临时文件要删,这两个目录:/usr/lib/ecl-11.1.1//home/pi/.slime/fasl/2015-08-18/ecl-11.1.1-linux-arm/ 命令如下

pi@raspberrypi ~/.slime/fasl/2015-08-18 $ sudo mv ./ecl-11.1.1-linux-arm/ ./ecl-11.1.1-linux-arm-back
pi@raspberrypi /usr/lib/ecl-11.1.1 $ sudo mv ./*.fas ./fas-back

貌似把 lib 目录下的全部 fas 文件移出去会导致失败,那就先恢复原样,只把 asdf.fas 移走试试。

继续报错,那就把最新下载回来的 asdf.lisp 拷贝过去,这下好了,asdf 的问题解决了。

不过出现了另一个错误:

121;;; Compiling /usr/share/common-lisp/source/slime/contrib/swank-trace-dialog.lisp.
122;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=3
123;;;
124;;; Error:
125;;;   in file swank-trace-dialog.lisp, position 6458
126;;;   at (DEFSLIMEFUN REPORT-PARTIAL-TREE ...)
127;;;   * The macro form (LOOP FOR I FROM (LENGTH RECENTLY-FINISHED) BELOW *TRACES-PER-REPORT* WHILE (< *VISITOR-IDX* (LENGTH *TRACES*\
   )) FOR TRACE = (AREF *TRACES* *VISITOR-IDX*) COLLECT TRACE UNLESS (COMPLETED-P TRACE) DO (PUSH TRACE *UNFINISHED-TRACES*) DO (INCF *\
   VISITOR-IDX*)) was not expanded successfully.
128;;; Error detected:
129;;; Iteration in LOOP follows body code.
130;;; Current LOOP context: FOR TRACE = (AREF *TRACES* *VISITOR-IDX*) COLLECT.;;
131;; Error while compiling /usr/share/common-lisp/source/slime/contrib/swank-trace-dialog.lisp:
132;;   COMPILE-FILE returned NIL.
133;; Aborting.
134;;
135
136Restart ABORT is not active.
137
138Available restarts:
139
1401. (RESTART-TOPLEVEL) Go back to Top-Level REPL.
141
142Broken at SWANK-LOADER::HANDLE-SWANK-LOAD-ERROR. In: #<process TOP-LEVEL>.
143 File: #P"/opt/software/slime/swank-loader.lisp" (Position #6091)
144>> 

报错的意思是这个 loop 宏形式没有成功展开,看来这个错误得去仔细研究一下 swank-trace-dialog.lisp 中这段代码了,不过暂时没啥时间,而且对 ECL 用得也不多,命令行下的 REPL 就足够用了,暂时留一个小尾巴,等以后有时间了再看。

本文最新版本:http://my.oschina.net/freeblues/blog/496640

==结束==

© 著作权归作者所有

共有 人打赏支持
FreeBlues
粉丝 98
博文 280
码字总数 493678
作品 0
其它
程序员
私信 提问
HIVE启动失败错误汇总

1.hiveserver2启动后,beeline不能连接的涉及的问题: 原因:权限问题解决: /history (如果配置了jobserver 那么/history也需要调整)这三个目录,hive在运行时要读取写入目录里的内容,所以...

o0无忧亦无怖
2015/10/08
89
0
Android学习大纲三 Android emulator 优化

性能测试: 1、操作系统 Android Emulator 在ubuntu11和win7的运行效率是有区别的,ubuntu11下的速度快于windows 2、360与其他杀毒软件 强烈建议运行Android Emulator前关闭所有杀毒软件和3...

迷途d书童
2012/03/05
289
0
eclipse运行springboot项目报错‘找不到或无法加载主类’

这是一个很烦躁的问题~,往往困住大家好长时间,然后各种百度。借此,咱将这个问题有可能产生的原因进行一下总结。若有不完善之处欢迎大家在下面留言指出~~ Duang!问题出现 然后开始尝试解决...

Code辉
2018/09/20
0
0
Ruby on Rails 终极部署方案 nginx+mina+puma

搭建工具介绍 作为一款十分优秀的web开发框架,在当前web领域中慢慢占据了越来越重要,秉承rails快速开发的特点,很多快速部署rails的方案也越来越多。这篇文章中所选的方案是我个人认为十分...

gameFu
2015/06/19
0
0
解决PHPadmin中错误:无法载入mcrypt 扩展

解决PHPadmin中错误:无法载入 mcrypt 扩展,请检查 PHP 配置 终极解决方案 最近在本机上架设PHP环境玩一个威客系统,按照网上的说明,一路下来,安装PHP,MYSQL,Zend Optimizer,PHPadmin.前面都是...

oschina
2010/01/31
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Mysql(Mariadb)数据库主从复制

Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据库中所有操作都...

linux-tao
53分钟前
2
0
Mysql(Mariadb)数据库主从复制

Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据库中所有操作都...

Linux就该这么学
今天
2
0
Mysql(Mariadb)数据库主从复制

Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据库中所有操作都...

xiangyunyan
今天
2
0
Android 自定义Path贝塞尔曲线View实践——旋转的花朵

一、关于贝塞尔曲线 在工业设计方面贝塞尔曲线有很多用途,同样,在Android中,贝塞尔曲线结合Path类可以实现更复杂的图形,这里我们给一个案例,来实现一种旋转的花朵。对于贝赛尔曲线的理解...

IamOkay
今天
3
0
7、redis主从复制和sentinel配置高可用

一:redis主从配置 1、环境准备 master : 192.168.50.10 6179 slave1: 192.168.50.10 6279 slave2: 192.168.50.10 6379 2、redis.conf配置文件配置 master port 6179......

刘付kin
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部