10

として与えられたcurl-lisp実行可能ファイルを作成するためにbuildappを使用したい:

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

質問に対するこの回答は、quicklisp が buildapp がシステムを取得できる方法でシステムをエクスポートできることをすでに示唆していますが、残念ながら詳細には触れていません。

また--asdf-path、SBCL (開始時) はすでに or を使用してドラクマをロードできるため、アウトの(require 'drakma)ままにしてみました(asdf:load-system "drakma")。また、--require代わりに使用--load-systemしても問題はありません。

したがって、buildapp を quicklisp と組み合わせて使用​​して、必要なシステムで実行可能ファイルを作成するにはどうすればよいですか (MISSING-COMPONENT PART については気をつけてください)。

4

1 に答える 1

17

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 にあることを確認します。2 つ目は、そのインデックスを使用して、インストールされた Quicklisp システムを使用してアプリケーションを構築します。

于 2013-09-20T14:01:07.300 に答える