Common lisp 在quicklisp项目上使用buildapp时如何修复asdf错误
我最近一直在做我的第一个quicklisp项目,我想与大家分享。我已经安装了github,但并不是每个人都安装了emacs+slime+quicklisp,所以我想制作一个可以与代码一起使用的可执行文件 为此,我使用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 '(
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屏幕截图:)