Std
OCaml.ml
ファイル内でモジュールを使用したい。
試し#load "Std"
ましたが、コンパイラが文句を言います。
OCaml内にモジュールをロードするにはどうすればよいですか?
Std
OCaml.ml
ファイル内でモジュールを使用したい。
試し#load "Std"
ましたが、コンパイラが文句を言います。
OCaml内にモジュールをロードするにはどうすればよいですか?
最初にインクルードするモジュールをコンパイルし、コンパイルされたファイルの場所をそれに応じてモジュールのコンパイルコマンドに指定してから、最後のコンパイルコマンドラインで指定する必要があります。
たとえば、ファイルについて考えてみましょうfoo/moduleA.ml
。
let v = 1
とファイルbar/moduleB.ml
:
open ModuleA
let w = v
コマンド:
$ cd foo
$ ocamlc -c moduleA.ml
$ cd ..
を生成moduleA.cmo
しmoduleA.cmi
ます。前者はモジュールのバイトコードオブジェクト(.o
ネイティブオブジェクトファイルのファイルのようですが、バイトコードデータとテキストを含みます)であり、後者は自動生成された.mli
ファイルから生成されたバイトコードコンパイル済みヘッダーです。このバイトコードヘッダーは、コンパイラがに依存するファイルをコンパイルするために必要ですModuleA
。
$ cd bar
$ ocamlc -I ../foo -c moduleB.ml
$ cd ..
前のコマンドが成功し、コマンドラインパラメータで依存関係を探す場所をコンパイラに示し、その後に最初のモジュールのパスが続くため、moduleB.cmo
に依存するを生成することに成功します。ModuleA
-I
以下の最後のコマンドは、両方のモジュールから実行可能なバイトコードを生成します。
$ ocamlc -I foo -I bar moduleA.cmo moduleB.cmo -o prog.byte
コンパイラーに最初に依存関係を知らせるために、モジュールはこの順序で提供される必要があります。今回の-I
パラメータは、.cmo
ファイルの場所を示しています。
したがって、あなたの場合、-I <location of std.cmi>
コンパイルの適切なフェーズにはを使用し、ライブラリの場合は2番目のフェーズ-I <location of std.cmo>
(std.cma
リンクフェーズ)にを使用する必要があります。ocamlc -I foo foo/moduleA.ml bar/moduleB.ml -o prog.byte
両方のフェーズを1つのコマンド(つまり、)に組み合わせることができ、両方cmo
のcmi
ファイルが同じディレクトリにある場合は、1つのパラメータだけで十分です。