SLIME 和 SWANK 在 MIPS 架构上失败

Posted

技术标签:

【中文标题】SLIME 和 SWANK 在 MIPS 架构上失败【英文标题】:SLIME and SWANK Fail on a MIPS Architecture 【发布时间】:2015-04-06 17:49:19 【问题描述】:

我正在尝试在Imagination Creator CI20 Mips 板上使用 Emacs 和 SLIME 和 Swank 来学习 Common Lisp。我正在使用 SBCL 和 Clisp 作为我的编译器/解释器(主要是 SBCL,通常设置为低级lisp模式);但是,我确实将 SBCL 和 Clisp 都设置为劣质lisp模式进行了测试,但两者都失败了。我尝试运行 SLIME,但在尝试加载或编译 Swank 文件时总是失败。其中一次尝试的错误消息表明它在架构上遇到了困难(Mips - little endian)。我正在运行开发板随附的 Debian 7 Wheezy (Mipsel) 的默认安装。

我尝试使用通过 apt-get 从 Debian 存储库安装的 SLIME,另一次使用 Melpa 安装 SLIME,最后再次尝试使用 Github git 存储库(最新)的 SLIME。尽管错误消息有时略有不同,但它们都失败了。 Emacs 23 和 24 都失败了。

我使用 SBCL 作为编译器,附上了我尝试使用 SLIME 的 Github 存储库的错误消息/模糊信息。 SBCL 是从 SBCL 存储库安装的,因为 Mipsel Wheezy 似乎在 Debian 存储库中没有它。它似乎确实是一个较旧的版本,但它是 SBCL website 上 Mips 架构的最新二进制文件。 SBCL 作为 REPL 从命令行运行良好。

(progn (load "/usr/share/common-lisp/source/slime/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "/tmp/slime.4482"))

This is SBCL 1.0.28, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
* 
; loading #P"/usr/share/common-lisp/source/slime/swank-loader.lisp"
WARNING:
   No architecture feature found in (POWERPC PPC X86 X86-64 X86_64 AMD64 I686
                                     I586 I486 PC386 IAPX386 SPARC64 SPARC
                                     HPPA64 HPPA ARM PENTIUM3 PENTIUM4 JAVA-1.4
                                     JAVA-1.5 JAVA-1.6 JAVA-1.7).

debugger invoked on a SB-C::INPUT-ERROR-IN-COMPILE-FILE:
  READ failure in COMPILE-FILE:
    SB-INT:SIMPLE-READER-PACKAGE-ERROR at 5799 (line 150, column 52) on #<SB-SYS:FD-STREAM for "file /usr/share/common-lisp/source/slime/swank-loader.lisp" 50007F71>:
      Symbol "APPLY-OUTPUT-TRANSLATIONS" not found in the ASDF package.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-C::READ-FOR-COMPILE-FILE
 #<SB-SYS:FD-STREAM for "file /usr/share/common-lisp/source/slime/swank-loader.lisp" 50007F71>
 5418)
0] 

【问题讨论】:

看起来它可能正在尝试交叉编译 MIPS 而不是使用本机 MIPS gcc。 【参考方案1】:

该版本的 SBCL 太旧,无法与当前的 SLIME 一起使用。尝试使用来自http://www.sbcl.org 的源代码构建和安装新版本的 SBCL,看看是否能改善这种情况。

【讨论】:

我刚刚从 SBCL 站点获取了二进制文件,因为我无法使用 apt-get 从 Debian 在该架构上下载一个。请注意,尝试使用 Clisp 作为解释器安装和运行 Slime 也会失败,但无限错误消息(本质上是相同消息的重复)更加神秘,所以我不确定这是否只是 SBCL 的问题。我也可以尝试使用 SLIME 支持的任何其他 CL 编译器或解释器,但我的选择在 Mips 上似乎非常有限。今晚将尝试从源代码编译 SBCL。 我确实尝试使用旧版本的 SBCL 或 Clisp 编译当前版本的 SBCL (1.28)。两者都未能编译 SBCL。

以上是关于SLIME 和 SWANK 在 MIPS 架构上失败的主要内容,如果未能解决你的问题,请参考以下文章

优化系列MIPS架构汇编优化总结

Clojure 的 Emacs/Swank/Paredit 教程

优化系列汇编优化技术:MIPS架构纯汇编优化及demo

在 MIPS 上对 C++ 和汇编代码进行微架构分析

优化系列MIPS架构汇编优化资料

在linux下编译并以qemu user模式运行mips架构的文件