1

我无法让 SBCL 在粘液下启动。我把事情搞砸了,我不知道如何恢复。这工作得很好,直到我...

通过 asdf 加载包时出现问题。此时我开始调试 SBCL 提供的 asdf.lisp 以查看出现了什么问题。我所做的唯一更改是放置一个(中断),一旦我找出问题所在,我就将其删除。一切都很好,直到我下次尝试启动 SBCL。

然后我得到一个华丽的编译错误,说 asdf.fasl 比 asdf.lisp 文件旧。这对我来说很有意义,所以我重新编译了 asdf.fasl。我现在得到的输出是:

(progn (load "c:\\emacs-23.1\\site-lisp\\slime\\swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "c:\\Users\\GILESR~1\\AppData\\Local\\Temp\\slime.3068" :coding-system "iso-latin-1-unix"))

This is SBCL 1.0.37, 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.

This is experimental prerelease support for the Windows platform: use
at your own risk.  "Your Kitten of Death awaits!"
* 
; loading #P"c:\\emacs-23.1\\site-lisp\\slime\\swank-loader.lisp"
; loading #P"c:\\hacking\\emacs\\.slime\\fasl\\2010-07-30\\sbcl-1.0.37-win32-x86\\swank-backend.fasl"
; loading #P"c:\\hacking\\emacs\\.slime\\fasl\\2010-07-30\\sbcl-1.0.37-win32-x86\\swank-source-path-parser.fasl"
; loading #P"c:\\hacking\\emacs\\.slime\\fasl\\2010-07-30\\sbcl-1.0.37-win32-x86\\swank-source-file-cache.fasl"

; compiling file "c:\\emacs-23.1\\site-lisp\\slime\\swank-sbcl.lisp" (written 22 JUL 2010 08:15:02 AM):

; file: c:\emacs-23.1\site-lisp\slime\swank-sbcl.lisp
; in: EVAL-WHEN (:COMPILE-TOPLEVEL :LOAD-TOPLEVEL :EXECUTE)
;     (REQUIRE 'SWANK-BACKEND::SB-BSD-SOCKETS)
; 
; caught ERROR:
;   (during compile-time-too processing)
;   The function ASDF::MODULE-PROVIDE-ASDF is undefined.

;     (REQUIRE 'SWANK-BACKEND::SB-INTROSPECT)
; 
; caught ERROR:
;   (during compile-time-too processing)
;   The function ASDF::MODULE-PROVIDE-ASDF is undefined.

;     (REQUIRE 'SWANK-BACKEND::SB-POSIX)
; 
; caught ERROR:
;   (during compile-time-too processing)
;   The function ASDF::MODULE-PROVIDE-ASDF is undefined.

;     (REQUIRE 'SWANK-BACKEND::SB-CLTL2)
; 
; caught ERROR:
;   (during compile-time-too processing)
;   The function ASDF::MODULE-PROVIDE-ASDF is undefined.
; 
; compilation unit aborted
;   caught 1 fatal ERROR condition
;   caught 4 ERROR conditions
;
; compilation aborted because of fatal error:
;   SB-INT:SIMPLE-READER-PACKAGE-ERROR at 1839 (line 62, column 18) on #<SB-SYS:FD-STREAM
;                                                                        for "file c:\\emacs-23.1\\site-lisp\\slime\\swank-sbcl.lisp"
;                                                                        {24564B89}>:
;     package "SB-POSIX" not found
;   ; compilation aborted after 0:00:00.045

;; 
;; Error while compiling c:\emacs-23.1\site-lisp\slime\swank-sbcl.lisp:
;;   COMPILE-FILE returned NIL.
;; Aborting.

所以它没有在我重新编译的 asdf 中找到它需要的一些东西。为了解决这个问题,我已经完全卸载并重新安装了 SBCL。没有喜悦。我的 .sbclrc 中也没有任何内容。

更新:在查看 asdf.lisp 源代码时,缺少的函数肯定在文件中。我认为阻止它们编译的原因是:

#+(and sbcl sbcl-hooks-require)

我的lisp知识目前还不足以在环境中编译asdf文件来触发上面的条件编译语句。

4

1 回答 1

0

我使用以下步骤对问题进行了排序:

  1. 从 Windows 开始菜单启动 sbcl。
  2. 运行以下代码将 sbcl-hooks-require 符号添加到功能列表中:

    (推送:sbcl-hooks-require features

  3. 重新编译 asdf.lisp。为了做到这一点,我需要在已安装的 C:\Program files\Steel... 目录之外重新编译 asdf,因为 Windows Vista 上的 UAC 将停止编写 fasl。例如:

    (编译文件“C:\foobar\asdf.lisp”)

  4. 将生成的 fasl 复制回 C:\Program files\Steel... 以覆盖原始 fasl。

更新:stackoverflow 上的格式已经删除了一些代码位。代码应如下所示:

(push :sbcl-hooks-require *features*)
(compile-file "C:\\foobar\\asdf.lisp")
于 2010-08-05T15:05:24.823 回答