我刚开始使用 common-lisp,来自 C++ 和 Python。我正在尝试运行一个简单的 SDL 程序,它除了在屏幕上显示图像之外什么都不做。我可以让它在 SLIME 中工作。问题是,当从 shell 作为脚本运行时,它不起作用。
我的程序如下所示:
#!/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 脚本运行时不起作用?我该如何解决?