私はOcamlを初めて使用し、小さなサンプルアプリケーションを作成しようとしています。ocamlcLinuxUbuntu10.04でバージョン3.11.2を使用しています。2つのファイルをコンパイルしたい:
a.ml
b.ml
ファイルb.mlはからの定義を使用しますa.ml。私が理解している限り、私はocamlc -cコンパイルのみを実行するために使用できます。すべてのファイルが実行可能ファイルにリンクされocamlcたら、最後にもう一度呼び出すことができます。.cmoまた、別のファイルの定義を使用するファイルをコンパイルする場合.cmi、外部定義を見つけるファイルをコンパイラーに指示する必要があります。
だから私の考えは使用することでした:
ocamlc -i -c a.ml > a.mli
ocamlc -c a.mli b.ml
ocamlc -o b a.cmo b.cmo
最初のステップは機能し、ファイルa.mliとを生成しますa.cmoが、2番目のステップを実行すると
File "b.ml", line 1, characters 28-31:
Error: Unbound value foo
ここfooで、はで定義されa.ml、で呼び出される関数ですb.ml。
だから私の質問は:各ソースファイルを個別にコンパイルし、コマンドラインでインポートするインターフェイスを指定するにはどうすればよいですか?私はドキュメントを調べていて、理解できる限り、.mli含めるファイルを指定する必要がありますが、その方法がわかりません。
編集
ここにいくつかの詳細があります。ファイルa.mlには定義が含まれています
let foo = 5;;
ファイルb.mlに式が含まれています
print_string (string_of_int foo) ^ "\n";;
実際の例はもっと大きいですが、これらのファイルでは、上記で報告したエラーがすでに発生しています。
編集2
私はファイルを編集b.mlして置き換えましfooたが、これは機能します(この質問にとって重要ではない別のコンパイルエラーがある場合でも、A.foofooが表示されます)。によって提案されている b.mlように、自分のファイルを明示的に書き込む方がクリーンだと思います.mli