Я только начал с 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 (compile/ загрузить файл).Откроется окно с изображением image.png, как и ожидалось.
Почему это не работает при запуске в качестве сценария shebang?Как я могу это исправить?