4

ocamlmktopにライブラリを追加するのに問題があります。

オブジェクトファイルcom/com.cmaを持つディレクトリcomがあります。

comディレクトリ内でocamlmktopcom.cma-o topを実行すると、結果の実行可能topにライブラリが含まれているように見えます。つまり、「Com.foo;;」と入力できます。そしてそれはモジュールComのfooの型署名を与えるでしょう。

ただし、comの上のディレクトリ内でocamlmktop com / com.cma -o topを実行すると、結果の実行可能ファイルにライブラリがないように見えます。つまり、「Com.foo;;」に応答します。「エラー:バインドされていないモジュールCom」が表示されます。

異なるフォルダーのライブラリを含める方法はありますか、それともすべての.cmaファイルを同じフォルダーに入れる必要がありますか?

また、私はOASISビルドシステムを使用しています。これらのライブラリのトップレベルが必要であることをOASISに通知できますか?

編集:

部分的な解決策を見つけました:ocamlc -pack a / a.cmo b / b.cmo -o every.cmo、次にocamlmktop every.cmo -o top; ただし、これにはすべてのライブラリを複製する必要があり、それらを単一のスーパーモジュールのサブモジュールにする必要があります。

4

1 に答える 1

2

上記のディレクトリからトップレベルを使用できない理由は、トップレベルにインターフェイスファイル(.cmi)が含まれておらず、ユーザーがモジュールにアクセスするときにトップレベルがディスク上でそれらを見つける必要があるためです。したがって、-I comスイッチを使用してトップレベルをロードするか、問題をロードした後にロードし#directory "com";;ます。

NB OASISは、次のリリース(0.4.0)でネイティブにトップレベルを構築することをサポートする必要があります。

于 2012-09-18T11:29:19.543 に答える