在树莓派2上安装了 Emacs + Slime + CCL/SBCL/CLISP/ECL
开发环境,结果启动时老是在 minibuffer
区出现以下错误,很难链接成功:html
Polling "/tmp/slime.5000 .. 25 (Abort with 'M-x slime-abort-connection'.) [730 times]
搜到几种解决办法,可是貌似都不起做用linux
主要参考此文:[Emacs slime mini buffer take-over] (http://stackoverflow.com/questions/15141617/emacs-slime-mini-buffer-take-over),其中有人提供了4种解决办法,不过貌似都不起做用git
一、在 ~/.emacs.d/
目录下新建 tmp
目录,并在 .emacs
中增长设置:github
(setq temporary-file-directory "/tmp")
二、清除掉 ~/.cache/common-lisp/
app
三、进入 slime
安装目录下的 /slime/contrib
,删除其中的 elc
文件socket
cd /path/slime/contrib find ./ -name '*.elc' | xargs rm -f
四、由于使用自动安装,致使缺乏 swank-loader.lisp,手动下载将其拷贝到 slime
的对应目录下,具体描述以下:oop
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.
看来取巧的办法是不存在的,最终仍是得靠本身研究,先看看错误信息提示:gitlab
(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
文件里的这个配置行:post
;; 设置 slime 加载目录 (add-to-list 'load-path "/opt/software/slime/")
恩,貌似有些明白了,上面的那个轮询提示是由于 slime
链接不到 swank
上,那么为何链接不上?CCL
提示 slime
版本跟 swank
版本不一致(目前看来,仍是 CCL
链接 slime
的错误提示最彻底)。this
在个人环境中 slime
最初是用这个命令安装的
sudo apt-get install slime
因而自动安装了一堆东西到 /usr/shar/common-lisp
下,包括旧版本的 slime
,cl-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/
下的文件,优先级我如今也记不太清楚了,因此致使咱们修改了的文件配置在加载时被系统的默认配置给覆盖了,因而咱们的配置就没起做用。
如今为了保证不会有多个修改源,后面下载回来的 slime
和 cl-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
而后按照上面第二、第3所说的清除相关文件
再次运行
emacs M - - M - x slime clisp
很好,编译一段时间后,链接成功, CLISP
下的 polling
信息消失了!
继续启动 CCL
和 SBCL
检查,所有 ok!看来问题初步获得了解决。
Emacs + Slime + Common Lisp
最好能本身独立下载安装,而后花点时间手动配置,不然用默认安装的话极可能会出现各类奇怪的问题。不过 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
==结束==