スタンドアロンの実行可能ファイルをSBCLでビルドするにはどうすればよいですか?私は試しましたSBCL:スタンドアロンの実行可能ファイルの作成
; SLIME 2.20
CL-USER> (defun hullo()
(format t "hullo"))
HULLO
CL-USER> (sb-ext:save-lisp-and-die "hullo" :toplevel #'hullo :executable t)
しかし、それだけで次のエラーが発生します。
Cannot save core with multiple threads running.
Interactive thread (of current session):
#<THREAD "main thread" RUNNING {10019563F3}>
Other threads:
#<THREAD "Swank Sentinel" RUNNING {100329E073}>,
#<THREAD "control-thread" RUNNING {1003423A13}>,
#<THREAD "reader-thread" RUNNING {1003428043}>,
#<THREAD "swank-indentation-cache-thread" RUNNING
{1003428153}>,
#<THREAD "auto-flush-thread" RUNNING {1004047DA3}>,
#<THREAD "repl-thread" RUNNING {1004047FA3}>
[Condition of type SB-IMPL::SAVE-WITH-MULTIPLE-THREADS-ERROR]
私は間違っていますか?
エラーは、複数のスレッドを実行していると言います。したがって、複数のスレッドを実行することなく保存する必要があります。スライムではなくrepl(例えば、端末内)で同じものを直接試してみてください。 –
@DanRobertson、それはうまく動作します。しかし、これは本当に実行可能ファイルをコンパイルする唯一の方法ですか?奇妙なことに思えます。 – Toothrot
面倒です。それを少し簡単にするいくつかの方法があります。画像を保存することは難しい問題です。保存したい国はたくさんありますが、それについて何をすべきかは明白ではありません。ファイルを開くとどうなりますか?オープンソケット?あなたの現在の作業ディレクトリやコマンドラインの引数はどうなりますか?実行中の他のスレッドはどうすればよいですか?開いているファイルがあり、コアを保存してからファイルを移動すると、コアを復元するときにストリームの状態はどうなりますか?実行中のアプリケーションでは、ファイルのiノードが移動しないため、これは問題ではありません。リンク解除と同じです。 –