在quicklisp项目上使用buildapp时如何修复asdf错误

Tra*_*alk 3 common-lisp asdf quicklisp

我最近一直在做我的第一个quicklisp项目,我想分享一下。我已将放在github上,但并非每个人都安装了emacs + slime + quicklisp,因此我想制作一个可执行文件,可以将其放入代码中。

为此,我正在使用buildapp并遵循 stackoverflow答案中列出的步骤。

$ 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
Run Code Online (Sandbox Code Playgroud)

运行这些命令后,出现以下错误:

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}>
Run Code Online (Sandbox Code Playgroud)

这里的主要问题是我什至不知道如何开始修复它。我已经看到过这个 gibhub问题,但这与Homebrew的问题有关,甚至从未提及buildapp。一切都很混乱。我希望我能得到一些帮助。

预先感谢您的任何答案。

cor*_*ump 5

我可以重现该错误。如注释中所建议,您可以构建buildapp如下的最新版本:

$ sbcl
* (ql:quickload :buildapp)
...

* (buildapp:build-buildapp 
    (merge-pathnames "bin/buildapp" (user-homedir-pathname)))
Run Code Online (Sandbox Code Playgroud)

这个构建$HOME/bin/buildapp。当我使用新的二进制文件时,不再有错误。

您还可以通过buildapp::main从Common Lisp 系统调用函数来避免生成可执行文件(最终可能会过时)。然后,您将始终拥有与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"))
Run Code Online (Sandbox Code Playgroud)