For Gauche 0.9.8


Previous: , Up: Gaucheでのプログラミング   [Contents][Index]

3.9 スタンドアロン実行可能ファイルの作成

Gaucheで作ったスクリプトやアプリケーションを配布する場合、 ユーザはGaucheのランタイムを手元のマシンにインストールする必要があります。 これは原理的にはどんな言語でも同じことです–Javaアプリケーションを使うなら Javaランタイムが必要ですし、Cアプリケーションを使うならCランタイムが必要です。 けれどもGaucheのようなマイナーな言語処理系のランタイムをインストールしてくれることを ユーザにお願いするのは、ややハードルが高いでしょう。

Gaucheのアプリケーションの配布を簡単にするために、 スタンドアロン実行ファイルを作ることができます。 これは、Gaucheシステム全体をスタティックリンクし、 ファイルひとつコピーすれば使えるような実行ファイルを生成します。

簡単な使い方

スタンドアロンな実行可能ファイルを作るには、Gaucheのインストール時に一緒に インストールされるbuild-standaloneにスクリプトファイルを与えるだけです。

gosh build-standalone yourscript.scm

これで、実行可能ファイルyourscript (Windowsではyourscript.exe) がカレントディレクトリに作られます。

スクリプト名とは別に実行ファイル名を指定したい場合は-oオプションを使います。

gosh build-standalone -o yourcommand yourscript.scm

スクリプトが他のサポートライブラリコードを必要とする場合は、 そのライブラリファイルも一緒に指定します。

gosh build-standalone yourscript.scm lib/library1.scm lib/library2.scm

ライブラリファイルのパス名は、loadがそのファイルを見つけられるような、 ロードパスからの相対パスである必要があります。 詳しくは下の-Iオプションの説明を見てください。

注意点

いくつか、気をつけなければならないことがあります。

build-standaloneスクリプトを使う

Program: gosh build-standalone [options] script-file [library-file …]

script-fileに記されたGaucheプログラムを実行するスタンドアロンの バイナリ実行可能ファイルを生成します。作られた実行可能ファイルを実行すると、 多少の違いを除いては、あたかもgosh script-fileを実行したのと同じ動作になります。

違いの重要な点は、実行可能ファイルではscript-fileがファイルシステムからロード されないため、script-fileのパスからの相対パスで何かを参照しているコードは 動かなくなるということです。例えば(add-load-path dir :relative) (see Schemeファイルのロード)で補助ライブラリを参照しているような場合です。 script-fileに必要な補助ライブラリはコマンドラインのlibrary-file …に 明示的に与えられなければなりません。それらは実行可能ファイルに同梱されます。

以下のコマンドラインオプションが使えます。

Command Option: -o outfile

出力される実行可能ファイルの名前を指定します。省略された場合はscript-fileの basenameから拡張子を除いたものになります。 (Windowsの場合は拡張子を.exeに変えたもの)

Command Option: -D var[=val]

中間で生成されるCコードをコンパイルする際に、Cプリプロセッサ定義を追加します。 使用例のひとつは、-D GAUCHE_STATIC_EXCLUDE_GDBMを指定することで 生成される実行可能ファイルからgdbmへの依存を取り除くというものです。 -Dvarの間に空白が必要なことに注意してください。

このオプションは複数指定できます。

Command Option: -I load-path

library-file …が検索されるロードパスを指定します。 library-fileに与えられるパス名は、それらをロードするために loaduseに与えられるパス名と一致している必要があります。 もしbuild-standaloneを走らせるディレクトリから見て これらのファイルが置かれている相対パスが必要なものと違っていた場合、 このオプションを指定してどのディレクトリからの相対でファイルを探すかを 教えてやらないとなりません。

例えばソースが次のとおり構成されていたとしましょう。

project/src/
    +----- main.scm 
    |          (use myscript.util)
    +----- myscript/util.scm
               (define-module myscript.util ...)

build-standalonesrcの下で実行する場合は、 単に次のとおり実行すれば済みます。

gosh build-standalone main.scm myscript/util.scm

しかし、projectの下で実行する場合は次のようにしなければなりません。

gosh build-standalone -I src src/main.scm myscript/util.scm

別の例を挙げましょう。ライブラリのディレクトリが分かれている場合です。

project/
    +----- src/main.scm 
    |          (use myscript.util)
    +----- lib/myscript/util.scm
               (define-module myscript.util ...)

build-standalonesrc以下で走らせる場合は次のようにします。

gosh build-standalone -I ../lib main.scm myscript/util.scm

project以下で走らせる場合はこうなります。

gosh build-standalone -I lib src/main.scm myscript/util.scm

このオプションは複数指定できます。-Iload-pathの間に空白が必要なことに 注意してください。

Command Option: --header-dir dir
Command Option: --library-dir dir

これらのオプションはbuild-standaloneが必要なGaucheのCヘッダファイルや スタティックライブラリをどこから探すかを指定します。

Gaucheが既にシステムにインストール済みであれば、build-standaloneは インストールされたディレクトリから自動的に必要なファイルを探すので、 このオプションを気にする必要はありません。インストールしていないGaucheのランタイムを 利用したい場合のみこれらのオプションを指定してください。


Previous: , Up: Gaucheでのプログラミング   [Contents][Index]