Gaucheで作ったスクリプトやアプリケーションを配布する場合、 ユーザはGaucheのランタイムを手元のマシンにインストールする必要があります。 これは原理的にはどんな言語でも同じことです–Javaアプリケーションを使うなら Javaランタイムが必要ですし、Cアプリケーションを使うならCランタイムが必要です。 けれどもGaucheのようなマイナーな言語処理系のランタイムをインストールしてくれることを ユーザにお願いするのは、ややハードルが高いでしょう。
Gaucheのアプリケーションの配布を簡単にするために、 スタンドアロン実行ファイルを作ることができます。 これは、Gaucheシステム全体をスタティックリンクし、 ファイルひとつコピーすれば使えるような実行ファイルを生成します。
Gaucheはまた、SRFI 138が定義するコマンドラインインターフェイスに
準拠するcompile-r7rs
スクリプトも提供します。
(https://srfi.schemers.org/srfi-138/srfi-138.html)
詳しくはgauche-compie-r7rs
- スクリプトのコンパイルを参照してください。
スタンドアロンな実行可能ファイルを作るには、Gaucheのインストール時に一緒に インストールされるtools/build-standaloneにスクリプトファイルを与えるだけです。
gosh tools/build-standalone yourscript.scm
これで、実行可能ファイルyourscript
(Windowsではyourscript.exe
)
がカレントディレクトリに作られます。
スクリプト名とは別に実行ファイル名を指定したい場合は-o
オプションを使います。
gosh tools/build-standalone -o yourcommand yourscript.scm
スクリプトが他のサポートライブラリコードを必要とする場合は、 そのライブラリファイルも一緒に指定します。
gosh tools/build-standalone yourscript.scm lib/library1.scm lib/library2.scm
ライブラリファイルのパス名は、load
がそのファイルを見つけられるような、
ロードパスからの相対パスである必要があります。
詳しくは下の-I
オプションの説明を見てください。
いくつか、気をつけなければならないことがあります。
ldd
、OSXならotool -L
など)を
走らせて下さい。
ユーザ環境にもそれらの動的ライブラリが入っている必要があります。
tools/build-standalone
スクリプトに
-D GAUCHE_STATIC_EXCLUDE_GDBM
フラグを与えてください。
そうするとgdbmはリンクされなくなります(その場合、スクリプトからgdbmは使えません)。
tools/build-standalone
に-D GAUCHE_STATIC_EXCLUDE_MBED
フラグを与えることで、
rfc.tls.mbed
モジュールへの依存を除外することができます。
• build-standaloneスクリプトを使う: |
script-fileに記されたGaucheプログラムを実行するスタンドアロンの
バイナリ実行可能ファイルを生成します。作られた実行可能ファイルを実行すると、
多少の違いを除いては、あたかもgosh script-file
を実行したのと同じ動作になります。
違いの重要な点は、実行可能ファイルではscript-fileがファイルシステムからロード
されないため、script-fileのパスからの相対パスで何かを参照しているコードは
動かなくなるということです。例えば(add-load-path dir :relative)
で補助ライブラリを参照しているような場合です(Schemeファイルのロード参照)。
script-fileに必要な補助ライブラリはコマンドラインのlibrary-file …に
明示的に与えられなければなりません。それらは実行可能ファイルに同梱されます。
以下のコマンドラインオプションが使えます。
出力される実行可能ファイルの名前を指定します。省略された場合はscript-fileの
basenameから拡張子を除いたものになります。
(Windowsの場合は拡張子を.exe
に変えたもの)
中間で生成されるCコードをコンパイルする際に、Cプリプロセッサ定義を追加します。
使用例のひとつは、-D GAUCHE_STATIC_EXCLUDE_GDBM
を指定することで
生成される実行可能ファイルからgdbmへの依存を取り除くというものです。
-D
とvarの間に空白が必要なことに注意してください。
このオプションは複数指定できます。
library-file …が検索されるロードパスを指定します。
library-fileに与えられるパス名は、それらをロードするために
load
やuse
に与えられるパス名と一致している必要があります。
もしtools/build-standalone
を走らせるディレクトリから見て
これらのファイルが置かれている相対パスが必要なものと違っていた場合、
このオプションを指定してどのディレクトリからの相対でファイルを探すかを
教えてやらないとなりません。
例えばソースが次のとおり構成されていたとしましょう。
project/src/ +----- main.scm | (use myscript.util) +----- myscript/util.scm (define-module myscript.util ...)
tools/build-standalone
をsrcの下で実行する場合は、
単に次のとおり実行すれば済みます。
gosh tools/build-standalone main.scm myscript/util.scm
しかし、projectの下で実行する場合は次のようにしなければなりません。
gosh tools/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 ...)
tools/build-standalone
をsrc以下で走らせる場合は次のようにします。
gosh tools/build-standalone -I ../lib main.scm myscript/util.scm
project以下で走らせる場合はこうなります。
gosh tools/build-standalone -I lib src/main.scm myscript/util.scm
このオプションは複数指定できます。
これらのオプションはtools/build-standalone
が必要なGaucheのCヘッダファイルや
スタティックライブラリをどこから探すかを指定します。
Gaucheが既にシステムにインストール済みであれば、tools/build-standalone
は
インストールされたディレクトリから自動的に必要なファイルを探すので、
このオプションを気にする必要はありません。インストールしていないGaucheのランタイムを
利用したい場合のみこれらのオプションを指定してください。