OCaml プログラム (main メソッドを使用 - 実行可能ファイルを生成) があり、それをライブラリとして使用したいと考えています。
私は次のようにプログラムをコンパイルしていました:ocamlc -I someDir -g -unsafe lotsOfCmoFiles -o outputFileプログラムは正常に動作します。
今、私はそれを実行可能にする行(のようなもの)を削除し、コマンドをコンパイルするためのパラメータをlet _ = ...追加しています:-aocamlc -a -I someDir -g -unsafe lotsOfCmoFiles -o outputFile.cma
しかし、どういうわけか、生成された .cma ファイルをロードできずocamltop、ocamlbrowser空のリストが表示されます。からロードしようとするとocamltop:
# #load "outputFile.cma";;
Error: Reference to undefined global `Xyz'
そして、xyz.cmo が に含まれていることは 100% 確信していlotsOfCmoFilesます。
コンパイル中に間違ったパラメーターを指定していますか? または、自分のプログラムを ocamltop にロードするにはどうすればよいですか? (このライブラリを別のプログラムで使用します。例として ocamltop の出力を示します)
どんな助けでも大歓迎です。
編集:@cagoのおかげで、最終的にコンパイルしてロードすることができました。これで、ライブラリをロードできます。メインlet _ = ...ラインを削除しないと、ロード時に自動的に実行されます.cma.
しかし、まだモジュールを開くことができません。奇妙なことに、これは例外を発生させません
open Main
しかし、モジュール Main から関数を呼び出すと、次のようになります。
# someFun;;
Error: Reference to undefined global `Main'
ocamlbrowseそれでも空のリストが表示されます。今それはなぜですか?
EDIT2:open Mainメインモジュールが同じフォルダーにあるため(明示的にロードしていなくても)、失敗しないことに気付きました。.cma ファイルを別の場所に移動してロードすると機能します (つまり、メイン関数が自動的に実行されます) が、ocamlobjinfoモジュールが表示されていてもモジュールを開くことができません。
EDIT3: -私は助けません:
$ ocaml
OCaml version 4.00.1
# #load "lib.cma";;
ok
# open Lib;;
Error: Unbound module Lib
#
$ ocaml -I libFolder
OCaml version 4.00.1
# #load "toylib.cma";;
ok
# open Lib;;
# fun;;
Error: Reference to undefined global `Lib'