在 quicklisp 项目上使用 buildapp 时如何修复 asdf 错误
How to fix asdf error when using buildapp on a quicklisp project
我最近一直在做我的第一个 quicklisp 项目,我想分享它。我已经将 it 放在 github 上,但并不是每个人都安装了 emacs + slime + quicklisp,所以我想制作一个可以与代码一起放置的可执行文件。
为此,我使用 buildapp
并按照 this Whosebug 答案中列出的步骤进行操作。
$ sbcl --no-userinit --no-sysinit --non-interactive \
--load ~/quicklisp/setup.lisp \
--eval '(ql:quickload "ltk-colorpicker")' \
--eval '(ql:write-asdf-manifest-file "quicklisp-manifest.txt")'
$ buildapp --output out \
--manifest-file quicklisp-manifest.txt \
--load-system ltk-colorpicker \
--entry colorpicker
在 运行 这些命令之后,我得到以下错误:
Fatal INPUT-ERROR-IN-LOAD:
READ error during LOAD:
The symbol "*SYSTEM-DEFINITION-SEARCH-FUNCTIONS*" is not external in the ASDF/FIND-SYSTEM package.
Line: 16, Column: 90, File-Position: 15267
Stream: #<SB-INT:FORM-TRACKING-STREAM for "file /home/nathan/quicklisp/local-projects/ltk-colorpicker/dumper-2SKVI5f7.lisp" {1001B70F83}>
这里的主要问题是我什至不知道如何开始修复它。我见过 this gibhub 问题,但这与 Homebrew 的问题有关,它甚至从未提及 buildapp
。这一切都非常混乱。我希望我能得到一些帮助。
提前感谢您的回答。
我可以重现错误。正如评论中所建议的,您可以按如下方式构建 buildapp
的最新版本:
$ sbcl
* (ql:quickload :buildapp)
...
* (buildapp:build-buildapp
(merge-pathnames "bin/buildapp" (user-homedir-pathname)))
此版本 $HOME/bin/buildapp
。当我使用新的二进制文件时,没有错误了。
您还可以通过系统地调用 Common Lisp 中的 buildapp::main
函数来避免生成可执行文件(最终可能会过时);然后你将始终拥有与当前 quicklisp 版本相对应的版本:
* (buildapp::main
'("BUILDAPP" ;; argv[0] must exist but the value is not important
"--manifest-file" "/tmp/quicklisp-manifest.txt"
"--load-system" "drakma" "--output" "/tmp/test"))
我的一些额外信息:
解决方案是使用@coredump 提到的最新版本的buildapp
。我通过转到 github page、下载 zip 并在存储 buildapp
的位置执行以下命令进行了更新。
$ make
$ cp buildapp /usr/bin
(这当然只适用于 linux。)
这不是一个优雅的解决方案,但是 buildapp
已经 4 年没有更新了,我认为这是一个足够安全的选择。我也犯了一个错误的命令。 --entry
部分是错误的。它应该是:`--entry ltk-colorpicker::main`` 其中 main 是一个接受一个变量的函数,因为 spec.
需要它
主要就是这样:(main (i) (declare (ignore i)) (colorpicker))
我最近一直在做我的第一个 quicklisp 项目,我想分享它。我已经将 it 放在 github 上,但并不是每个人都安装了 emacs + slime + quicklisp,所以我想制作一个可以与代码一起放置的可执行文件。
为此,我使用 buildapp
并按照 this Whosebug 答案中列出的步骤进行操作。
$ sbcl --no-userinit --no-sysinit --non-interactive \
--load ~/quicklisp/setup.lisp \
--eval '(ql:quickload "ltk-colorpicker")' \
--eval '(ql:write-asdf-manifest-file "quicklisp-manifest.txt")'
$ buildapp --output out \
--manifest-file quicklisp-manifest.txt \
--load-system ltk-colorpicker \
--entry colorpicker
在 运行 这些命令之后,我得到以下错误:
Fatal INPUT-ERROR-IN-LOAD:
READ error during LOAD:
The symbol "*SYSTEM-DEFINITION-SEARCH-FUNCTIONS*" is not external in the ASDF/FIND-SYSTEM package.
Line: 16, Column: 90, File-Position: 15267
Stream: #<SB-INT:FORM-TRACKING-STREAM for "file /home/nathan/quicklisp/local-projects/ltk-colorpicker/dumper-2SKVI5f7.lisp" {1001B70F83}>
这里的主要问题是我什至不知道如何开始修复它。我见过 this gibhub 问题,但这与 Homebrew 的问题有关,它甚至从未提及 buildapp
。这一切都非常混乱。我希望我能得到一些帮助。
提前感谢您的回答。
我可以重现错误。正如评论中所建议的,您可以按如下方式构建 buildapp
的最新版本:
$ sbcl
* (ql:quickload :buildapp)
...
* (buildapp:build-buildapp
(merge-pathnames "bin/buildapp" (user-homedir-pathname)))
此版本 $HOME/bin/buildapp
。当我使用新的二进制文件时,没有错误了。
您还可以通过系统地调用 Common Lisp 中的 buildapp::main
函数来避免生成可执行文件(最终可能会过时);然后你将始终拥有与当前 quicklisp 版本相对应的版本:
* (buildapp::main
'("BUILDAPP" ;; argv[0] must exist but the value is not important
"--manifest-file" "/tmp/quicklisp-manifest.txt"
"--load-system" "drakma" "--output" "/tmp/test"))
我的一些额外信息:
解决方案是使用@coredump 提到的最新版本的buildapp
。我通过转到 github page、下载 zip 并在存储 buildapp
的位置执行以下命令进行了更新。
$ make
$ cp buildapp /usr/bin
(这当然只适用于 linux。)
这不是一个优雅的解决方案,但是 buildapp
已经 4 年没有更新了,我认为这是一个足够安全的选择。我也犯了一个错误的命令。 --entry
部分是错误的。它应该是:`--entry ltk-colorpicker::main`` 其中 main 是一个接受一个变量的函数,因为 spec.
主要就是这样:(main (i) (declare (ignore i)) (colorpicker))