我想使用buildapp将curl-lisp可执行文件设为example:
buildapp --output lisp-curl --asdf-path ~/src/clbuild/systems/ \
--load-system drakma \
--eval '(defun main (args) (write-string (drakma:http-request (second args))))' \
--entry main
这绝对不会起作用,因为我没有路径“〜/ src / clbuild / systems /”,因为我使用quicklisp我的系统应该在“〜/ quicklisp / dists / quicklisp / software”,但是当我执行:
buildapp --output lisp-curl \
--asdf-path ~/quicklisp/dists/quicklisp/software \
--load-system drakma \
--eval '(defun main (args) (write-string (drakma:http-request (second args))))' \
--entry main
; file: /home/simkoc/dumper-YKYna1b3.lisp
; in: DEFUN DUMP-FILE-DEBUGGER
; (QUIT :UNIX-STATUS 111)
;
; caught STYLE-WARNING:
; SB-EXT:QUIT has been deprecated as of SBCL 1.0.56.55. Use SB-EXT:EXIT or
; SB-THREAD:ABORT-THREAD instead.
;
; In future SBCL versions SB-EXT:QUIT will signal a full warning at compile-time.
;
; compilation unit finished
; caught 1 STYLE-WARNING condition
Fatal MISSING-COMPONENT:
Component "drakma" not found
This回答一个问题已经提示,quicklisp能够以buildapp能够检索它的方式导出其系统,但遗憾的是没有详细说明。
我也尝试退出--asdf-path
,因为SBCL(启动时)已经能够使用(require 'drakma)
或(asdf:load-system "drakma")
加载Drakma。使用--require
代替--load-system
也无法达成交易。
因此:我如何将buildapp与quicklisp结合使用,以使用所需的系统制作可执行文件(我只是关于MISSING-COMPONENT PART的汽车)
答案 0 :(得分:13)
如果已经在quicklisp中安装了Drakma,我认为如果您使用--asdf-tree
而不是--asdf-path
,您的示例将会有效。但是将Quicklisp目录用作树可能会导致一些麻烦,因为并非树中的每个系统文件都要加载。
还有另一种选择可以与Quicklisp对可用系统的了解更紧密地集成。这是我的所作所为:
sbcl --no-userinit --no-sysinit --non-interactive \
--load ~/quicklisp/setup.lisp \
--eval '(ql:quickload "drakma")' \
--eval '(ql:write-asdf-manifest-file "quicklisp-manifest.txt")'
buildapp --manifest-file quicklisp-manifest.txt --load-system drakma [the rest of your options]
第一个命令确保已下载drakma,并且Quicklisp知道的系统索引位于quicklisp-manifest.txt中。第二个使用该索引来使用已安装的Quicklisp系统构建应用程序。