gpt4 book ai didi

lisp 作为 shebang 脚本与在 SLIME 中运行的 lisp

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:31 25 4
gpt4 key购买 nike

我刚开始使用 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)

然后,在编辑器窗口中,我按下 C-c C-k(编译/加载文件)。正如预期的那样,这会弹出一个显示 image.png 的窗口。

为什么这在作为 shebang 脚本运行时不起作用?我该如何解决?

最佳答案

正如 sbcl 的手册页所说,--script 意味着 --no-sysinit --no-userinit --disable-debugger --end-toplevel-options,这意味着不读取初始化文件,因此如果您在那里设置 ASDF 注册表,它不会设置,因此它找不到 lispbuilder-sdl 系统。您需要在脚本本身中设置注册表,或者 save an executable core注册表已经设置并调用它而不是默认的 sbcl。通常您也可以将库保存在核心中而不是将它们加载到脚本中,但我不太确定它如何与非 Lisp 库和资源交互。

关于lisp 作为 shebang 脚本与在 SLIME 中运行的 lisp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4914636/

25 4 0
文章推荐: html - General Anchor css 覆盖类...但仅在一页上
文章推荐: python - 确定以下编码段的时间复杂度
文章推荐: Python 类运行时错误
文章推荐: HTML/CSS
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com