lisp как сценарий shebang против lisp, работающего в SLIME

Я только начал с common-lisp, перейдя из C ++ и Python. Я пытаюсь запустить простую программу SDL, которая ничего не делает, кроме отображения изображения на экране. Я могу заставить его работать из SLIME. Проблема в том, что он не будет работать при запуске из оболочки как скрипт.

Моя программа выглядит так:

#!/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)

Когда я запускаю ее как сценарий, я получаю следующую ошибку:

mkg@chisel:~/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]

(... длинная трассировка опущена)

Как ни странно, эта программа отлично работает, если я выполняю следующий. Я открываю программу в Emacs, запускаю SLIME в другом окне и в окне SLIME ввожу первую строку программы:

(asdf:operate 'asdf:load-op :lispbuilder-sdl)

Затем в окне редактора я нажимаю Cc Ck (скомпилировать / загрузить файл). Как и ожидалось, появится окно с изображением image.png.

Почему это не работает при запуске как скрипт shebang? Как я могу это исправить?

9
задан SuperElectric 6 February 2011 в 06:51
поделиться