質問
Lispの学習を始めたばかりで、Lispコードをコンパイルして実行可能ファイルにリンクする方法がわかりません。
clisp
とclisp -c
を使用していますが、2つのファイルが生成されます:
- .fas
- .lib
実行可能ファイルを取得するために次に行うことは何ですか?
解決
私は実際に今日これをやろうとしていましたが、これをCLisp REPLに入力するとうまくいきました:
(EXT:SAVEINITMEM "executable.exe"
:QUIET t
:INIT-FUNCTION 'main
:EXECUTABLE t
:NORC t)
mainは、プログラムの起動時に呼び出す関数の名前です。:QUIET t
は起動バナーを抑制し、:EXECUTABLE t
はネイティブ実行可能ファイルを作成します。
呼び出すことも便利です
(EXT:EXIT)
メイン関数の最後に、プログラムの終了時にユーザーが対話型のLispプロンプトを表示しないようにします。
編集:ドキュメントを読んで、追加することもできます:NORC t
(リンクをご覧ください)。これにより、RCファイル(たとえば、~/.clisprc.lisp
)の読み込みが抑制されます。
他のヒント
これは、 Lisp FAQ (わずかに適合)です。
***プログラムから実行可能ファイルを作成するにはどうすればよいですか
これは実装によって異なります。あなたに相談する必要があります ベンダーのドキュメント。
ECLおよびGCLを使用すると、標準のコンパイルプロセスは ネイティブ実行可能ファイルを生成します。
LispWorksについては、 Delivery User's Guide セクションの ドキュメント。
Allegro Common Lispの場合、 Delivery セクションの マニュアル。
etc ...
ただし、Common Lispプログラムと対話する古典的な方法 スタンドアロンの実行可能ファイルは含まれません。これを考慮しましょう 開発プロセスの2つのフェーズ:プログラミングと配信。
プログラミングフェーズ:Common Lisp開発には、 バッチ指向言語で一般的であるよりも漸進的な感覚。 編集-コンパイル-リンクのサイクルは一般的です。 CL開発者は簡単に実行できます テストおよび環境との一時的な相互作用 REPL(またはRead-Eval-Print-Loop、別名 リスナー)。ソースコードはファイルに保存され、ビルド/ロード ソースファイル間の依存関係はシステム記述に記録されます ASDFなどの機能( make と同様の役割を果たす 編集-コンパイル-リンクシステム)。システム記述機能は以下を提供します システムを構築するためのコマンド(および、 依存関係は最後のビルド以降に変更されています)、および システムをメモリに挿入します。
ほとんどの一般的なLisp実装は、<!> quot; save-world <!> quot;も提供します。機構 これにより、現在のLispイメージのスナップショットを保存できます。 後で再起動できる形式で。 Common Lisp環境 通常、比較的小さな実行可能ランタイムで構成され、 Lispワールドの状態を含む大きな画像ファイル。共通 この機能の使用は、すべてを含むカスタマイズされたイメージをダンプすることです 特定のプロジェクトで使用されるツールとライブラリを順番に構築する 起動時間を短縮します。たとえば、この機能は下で利用可能です CMUCLのEXT:SAVE-LISP、SB-EXT:SAVE-LISP-AND-DIEの名前 CLISPのSBCL、EXT:SAVEINITMEM、およびCCL:SAVE-APPLICATION OpenMCL。これらの実装のほとんどは、ランタイムを イメージ、それによりそれを実行可能にします。
アプリケーション配信:単一の実行可能ファイルを生成するのではなく Lisp開発者は通常、アプリケーションのファイルを保存します アプリケーションを含めて、クライアントに配信します ランタイムと、場合によっては アプリケーションイメージを含むランタイム。 Windowsプラットフォームでは、これは Click-o-matic InstallShieldタイプツールを使用してユーザーから隠されます。
clispの公式ホームページをご覧ください。この質問に答えるFAQがあります。
CLikiにも良い答えがあります:実行可能ファイルの作成
これをポータブルに行うには、 roswell をお勧めします。
サポートされている実装では、lispスクリプトを作成して、ros
で移植可能な方法で実行できるプログラムを実行できます。これは、Pythonまたはrubyプログラムと同様にハッシュバンラインで使用できます。
SBCLおよびCCLの場合、roswellはros dump executable
を使用してバイナリ実行可能ファイルを作成することもできます。
これは古い質問ですが、私が見ているLispコードは25歳です:-)
Windows 10でclispを使用してコンパイルを実行できませんでした。 ただし、 gcl を使用するとうまくいきました。
lispファイルがjugs2.lispの場合、
gcl -compile jugs2.lisp
jugs2.lispファイルにエラーがない場合、これはファイルjugs2.oを生成します。
パラメーターなしでgclを実行して、Lispインタープリターを起動します。
gcl
.oファイルをロードします:
(load "jugs2.o")
EXEを作成するには:
(si:save-system "jugs2")
EXEを実行するには、DLL oncrpc.dll
が必要です。これは、gcl.batが作成する<gcl install folder>\lib\gcl-2.6.1\unixport
フォルダーにあります。
実行すると、Lisp環境が表示され、(main)を呼び出してmain関数を実行します (メイン)。