13

自分のプログラムの Lisp イメージを作成したい場合、どうすれば適切に作成できますか? 前提条件はありますか?QUICKLISP との相性も抜群ですよね?

ここで、SBCL を (QUICKLISP だけをプリロードして) 起動し、イメージを保存すると、次のようになります。

(save-lisp-and-die "core")

そして、このイメージで SBCL を再起動してみてください

sbcl --core core

そして、やってみてください:

(ql:quickload :cl-yaclyaml)

私は以下を取得します:

To load "cl-yaclyaml":
  Load 1 ASDF system:
    cl-yaclyaml
; Loading "cl-yaclyaml"
.......
debugger invoked on a SB-INT:EXTENSION-FAILURE in thread
#<THREAD "main thread" RUNNING {100322C613}>:
  Don't know how to REQUIRE sb-sprof.
See also:
  The SBCL Manual, Variable *MODULE-PROVIDER-FUNCTIONS*
  The SBCL Manual, Function REQUIRE

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [RETRY                        ] Retry completing load for #<REQUIRE-SYSTEM "sb-sprof">.
  1: [ACCEPT                       ] Continue, treating completing load for #<REQUIRE-SYSTEM "sb-sprof"> as having been successful.
  2:                                 Retry ASDF operation.
  3: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration.
  4: [ABORT                        ] Give up on "cl-yaclyaml"
  5:                                 Exit debugger, returning to top level.

(SB-IMPL::REQUIRE-ERROR "Don't know how to ~S ~A." REQUIRE "sb-sprof")
0] 

または、試してみると:

(require 'sb-sprof)

保存したコアで sbcl を開始すると、同じエラーが発生します。sbclエラーが報告されていないのと同じように sbcl が開始された場合。

実際、QUICKLISP のプリロードは問題ではありません。最初に sbcl を呼び出すと、同じ問題が発生しsbcl --no-userinit --no-sysinitます。

私はそれを間違っていますか?

PS。roswellを使用すると、ros -L sbcl-bin -m core runどういうわけか画像を取得できません(*A*保存する前に変数を宣言し、再起動すると表示されないことでテストされています)。

PS2。これまでのところ、イメージを保存する前に明示的に必要とされない限り、sbcl は拡張モジュール ( 、 など) を提供していないようSB-SPROFです。SB-POSIX

4

2 に答える 2

9

@jkiiski からの助けに感謝します。完全な説明と解決策は次のとおりです。

  1. SBCL は、常にイメージにロードされるとは限らない追加のモジュール ( SB-SPROF、およびその他) を使用します。SB-POSIXこれらのモジュールは、環境変数が指す場所 (設定されている場合) またはイメージが存在する場所 (たとえば、 ) にcontribあるディレクトリにあります。SBCL_HOME/usr/local/lib/sbcl/

  2. 画像が別の場所に保存され、SBCL_HOMEが設定されていない場合、SBCL は を見つけることができないためcontrib、私が見たエラーです。

  3. 場所を指すように SBCL_HOME を設定するcontrib(またはcontrib、イメージの場所または新しいイメージをcontrib場所にコピーする) と、問題が解決します。

  4. 最後に、roswell について: roswell パラメータ-mは、特定の場所にある画像を検索します。SBCL( sbcl-bin) の場合は、次のようになります~/.roswell/impls/x86-64/linux/sbcl-bin/1.3.7/dump/。次に、SBCL のイメージ名の形式は<name>.core. それを開始するには、次を使用しますros -m <name> -L sbcl-bin run。(クイック編集:ros dump私に指摘されたように、roswellを使用して画像を保存するためのより良い使用)

于 2016-08-25T14:55:39.377 に答える