Tôi chỉ mới bắt đầu với lisp thông thường, có nguồn gốc từ C++ và Python. Tôi đang cố gắng để chạy một chương trình SDL đơn giản mà không có gì khác hơn là hiển thị một hình ảnh trên màn hình. Tôi có thể làm cho nó hoạt động từ bên trong SLIME. Vấn đề là, nó sẽ không hoạt động khi chạy từ trình bao dưới dạng tập lệnh.lisp như một kịch bản shebang vs lisp chạy trong SLIME
chương trình của tôi trông như thế này:
#!/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)
Khi tôi chạy như một kịch bản, tôi nhận được lỗi sau:
[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]
(... backtrace dài bỏ qua)
Oddly, chương trình này hoạt động tốt nếu tôi làm như sau. Tôi mở chương trình trong Emacs, bắt đầu SLIME trong một cửa sổ khác, và trong cửa sổ SLIME, tôi nhập dòng đầu tiên của chương trình:
(asdf:operate 'asdf:load-op :lispbuilder-sdl)
Sau đó, trong cửa sổ soạn thảo, tôi nhấn Cc Ck (biên dịch/tải tập tin). Điều này bật lên một cửa sổ hiển thị image.png, như mong đợi.
Tại sao tính năng này không hoạt động khi chạy dưới dạng tập lệnh shebang? Làm thế nào tôi có thể sửa chữa nó?