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

Common lisp 在quicklisp项目上使用buildapp时如何修复asdf错误,common-lisp,quicklisp,asdf,Common Lisp,Quicklisp,Asdf,我最近一直在做我的第一个quicklisp项目,我想与大家分享。我已经安装了github,但并不是每个人都安装了emacs+slime+quicklisp,所以我想制作一个可以与代码一起使用的可执行文件 为此,我使用buildapp并遵循stackoverflow答案中列出的步骤 $ sbcl --no-userinit --no-sysinit --non-interactive \ --load ~/quicklisp/setup.lisp \ --eval '(

我最近一直在做我的第一个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
运行这些命令后,我得到以下错误:

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}>
致命输入错误加载:
加载期间的读取错误:
符号“*SYSTEM-DEFINITION-SEARCH-FUNCTIONS*”在ASDF/FIND-SYSTEM包中不在外部。
行:16,列:90,文件位置:15267
流:#
这里的主要问题是,我甚至不知道如何开始修复它。我见过gibhub的问题,但这与自制软件的问题有关,它甚至从未提到
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
。我通过转到、下载zip并在存储
buildapp
的位置执行以下命令进行更新

$ make
$ cp buildapp /usr/bin
(当然,这只适用于linux。) 这不是一个优雅的解决方案,但是
buildapp
已经4年没有更新了,我认为这是一个足够安全的赌注。我在命令上也犯了一个错误。
--entry
部分错误。它应该是:`--entry ltk colorpicker::main``其中main是一个接受一个变量的函数,因为它是

Main就是这样:
(Main(i)(declare(ignore i))(colorpicker))

您提到的github问题确实提到了buildapp,在我看来,问题在于ASDF和buildapp之间缺少向后兼容性。也许您需要更新版本的buildapp(或从源代码构建)。仅供参考,您不必使用buildapp构建可执行文件。我们可以使用
asdf:make
,请参见和ps:I demand屏幕截图:)