我想使用 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/c build/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(启动时)已经能够使用加载 Drakma(require 'drakma)
or (asdf:load-system "drakma")
。还使用--require
代替--load-system
不会做这笔交易。
因此:我如何将 buildapp 与 Quicklisp 结合使用来制作具有所需系统的可执行文件(我只关心缺失的组件部分)
如果 Drakma 已经安装在 Quicklisp 中,我认为如果您使用,您的示例将会工作--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 系统构建应用程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)