Erro iniciando o SBCL sob lodo no Vista
Pergunta
Estou tendo problemas para fazer com que o SBCL comece com Slime. Eu estraguei as coisas e não sei como me recuperar. Isso estava funcionando bem até eu ...
Teve um problema em carregar um pacote via ASDF. Nesse ponto, comecei a depurar o ASDF.lisp fornecido com o SBCL para ver o que estava dando errado. A única mudança que fiz foi colocar uma (interrupção) na qual removi depois de descobrir o que estava errado. Tudo estava bem até a próxima vez que tentei iniciar o SBCL.
Então recebi um erro de compilação Swank dizendo que o ASDF.fasl era mais antigo que o arquivo asdf.lisp. Isso fazia sentido para mim, então eu recompei o asdf.fasl. A saída que estou recebendo agora é:
(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.
Portanto, não está encontrando algumas coisas de que precisa no meu ASDF recompilado. Para resolver isso, fiz uma desinstalação completa e reinstalação do SBCL. Sem alegria. Também não tenho nada no meu .sbclrc.
ATUALIZAÇÃO: Ao visualizar o código -fonte ASDF.LISP, as funções ausentes estão definitivamente no arquivo. O que os impede de compilar é que eu acho que a linha:
#+(and sbcl sbcl-hooks-require)
No momento, meu conhecimento do LISP não é suficiente para compilar o arquivo ASDF no ambiente para acionar a declaração de compilação condicional acima.
Solução
Eu resolvi o problema usando as seguintes etapas:
- Atire SBCL do menu Iniciar do Windows.
Execute o código a seguir para adicionar o símbolo SBCL-HONKS-REQUIRE à lista de recursos:
(Push: SBCL Hooks-Require recursos)
Recompile asdf.lisp. Para fazer isso, eu precisava recompilar o ASDF fora do diretório C: Arquivos de Programas Aço ... como o UAC no Windows Vista, impedirá que o FASL seja escrito. Por exemplo:
(Compile-File "C: foobar asdf.lisp")
Copie o FASL gerado de volta para C: Arquivos de Programas Aço ... para substituir o FASL original.
ATUALIZAÇÃO: A formatação no StackOverflow nocauteou alguns dos bits de código. O código deve ser o seguinte:
(push :sbcl-hooks-require *features*)
(compile-file "C:\\foobar\\asdf.lisp")