4

Ocaml マニュアルには、次の方法でライブラリ オブジェクト ファイルをトップレベル ループ (ocaml インタラクティブ インタープリター) にロードする演習 (こちら) が含まれています。

#load "dynlink.cma";;
#load "camlp4o.cma";;

コンパイル可能なソース ファイルで後続のコードを複製しようとしていますが、コードには上記のライブラリ オブジェクト ファイルが必要です。これらのファイルをソース ファイル内のコード行でロードし、ocamlc でコンパイルできますか? 「#load」、「load」、「#use」、「use」、「#require」、「require」を試しましたが、これらはすべて「#directory」と「directory」によって処理されました。「include ;;」でモジュールをインクルードできることは知っていますが、モジュールではなく単なるライブラリ ファイルであるため、これも機能しないはずです。マニュアルでこれを行う方法を見つけようとしましたが、役に立ちませんでした。

コンパイル コマンドでファイルを参照する必要がありますか? もしそうなら、どうすればいいですか?

4

2 に答える 2

2

# 文字で始まるディレクティブはトップレベルでのみ使用され、厳密には OCaml 言語の一部ではありません。コンパイルするファイルでは、# ディレクティブを使用しません。OCaml マニュアルの第 9 章を参照してください。#load ディレクティブは、ライブラリをロードするためのものです。ファイルをコンパイルするときは、ライブラリを使用するようにコンパイラに指示する必要があります (ファイルではなくコマンド ラインで)。最初はコンパイラ コマンドを直接学習することをお勧めしますが、最終的には、コンパイルがはるかに簡単になるocamlfindoasisを使用する必要があります。

于 2012-12-12T14:42:05.870 に答える
1

私はあなたのソースがcamlp4oによって実装された拡張機能を使用して書かれていると仮定しています。ソースをコンパイルするには、次のように言うことができます。

ocamlc -pp camlp4o -o myfile myfile.ml

#loadコマンドの複雑さは、トップレベル(インタープリター)で拡張機能を使用する場合にのみ必要になると思います。

于 2012-12-12T02:03:34.953 に答える