私は、C++とPythonから来たcommon-lispから始めました。画面に画像を表示する以外に何もしない単純な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を示すウィンドウがポップアップ表示されます。
シバンスクリプトとして実行すると、これが機能しないのはなぜですか?どうすれば修正できますか?