Ho appena iniziato con common-lisp, essendo venuto da C++ e Python. Sto cercando di eseguire un semplice programma SDL che non fa altro che mostrare un'immagine sullo schermo. Posso farlo funzionare da SLIME. Il problema è che non funzionerà quando viene eseguito dalla shell come script.lisp come script shebang vs lisp in esecuzione in SLIME
Il mio programma si presenta così:
#!/usr/bin/sbcl --script
(asdf:operate 'asdf:load-op :lispbuilder-sdl)
(defun main()
(sdl:with-init()
(sdl:window 320 240)
(sdl:draw-surface (sdl:load-image "image.png"))
(sdl:update-display)
(sdl:with-events()
(:quit-event() t)
(:video-expose-event() (sdl:update-display)))))
(main)
Quando ho eseguito questo come uno script, ottengo il seguente errore:
[email protected]:~/projects/common-lisp/sandbox$ ./hello-world.lisp
unhandled ASDF:MISSING-COMPONENT in thread #<SB-THREAD:THREAD "initial thread" RUNNING {AA5E849}>:
component "lispbuilder-sdl" not found
0: (SB-DEBUG::MAP-BACKTRACE #<CLOSURE (LAMBDA #) {AAF1EF5}>)[:EXTERNAL]
(... lunga backtrace omesso)
Stranamente, questo programma funziona bene se faccio quanto segue. Apro il programma in Emacs, avviare SLIME in un'altra finestra, e nella finestra SLIME, entro nella prima riga del programma:
(asdf:operate 'asdf:load-op :lispbuilder-sdl)
Poi, nella finestra di editor, mi ha colpito Cc Ck (compilare/carico file). Questo fa apparire una finestra che mostra image.png, come previsto.
Perché non funziona quando viene eseguito come script shebang? Come posso ripararlo?