Clozure Common Lispを使用したバイナリのコンパイル
-
08-07-2019 - |
質問
次のような簡単なプログラムを考えると、どのようになりますか:
-
それを別のイメージファイルとしてコンパイルし、実装によってロードします。ロードに使用するコマンドライン引数は何ですか?
-
ロードしてそのまま実行できるスタンドアロンのバイナリとしてコンパイルします。
注:":prepend-kernel t"を追加しようとしました。フォローエラーをスローするためだけにアプリケーションを保存する場合。
Error: value NIL is not of the expected type REAL. While executing: CCL::<-2, in process Initial(0).
-
ウェルカムメッセージをどのように抑制しますか?
プログラム
(defun main () (format t "This is the program.")0)
編集
自分の質問の一部に答えるのは嫌いですが、それでもなおそれを見つけました。
関数がロードされたら、次を入力してコンパイルします。
(ccl:save-application "app")
これにより、画像ファイルが作成されます。実装タイプに渡してロードする(注:「ccl」バイナリはシステムパスにあります);
ccl -I app
最上位レベルの関数を実行するには、パラメーターとして渡します
ccl -I app --eval (main)
解決
アプリケーションの保存にあるClozure Common Lispのドキュメントを参照してください。
Lispファイルのコンパイルと読み込み
/foo/bar.lisp という名前のファイルをコンパイルするには、
を呼び出します。 (compile-file "/foo/bar.lisp")
これにより、ネイティブコードを含む fasl (FASt Load)ファイルが作成されます。
LOAD
関数を使用して、コンパイル済みファイル、faslファイルをロードできます。 LOAD
および COMPILE-FILE
は、標準のCommon Lisp関数です。
アプリケーションの作成
いくつかの定義:
- CCLカーネル:メモリ管理などの低レベルのランタイムサービスを提供するCCLの一部。
- 画像:保存されたLispヒープのダンプ
- アプリケーション:CCLカーネル+イメージ。これは1つのファイルに含めることができます。
CCL固有の関数を呼び出すことにより、アプリケーションを保存できます。
(save-application "/foo/bar-image" :toplevel-function #'main)
これにより、コマンドシェルからCCLカーネルを使用して実行できるイメージが保存されます。
ccl -I /foo/bar-image
カーネルを含む実行可能ファイルを保存するには、Lispからこれを使用します。
(save-application "/foo/bar-app"
:toplevel-function #'main
:prepend-kernel t)
コマンドシェルから / foo / bar-app
を使用して、通常どおりこの実行可能ファイルを呼び出すことができます。
Clozure Common Lispでは、チェックできます
*command-line-argument-list*
提供されたコマンドライン引数のリスト。