OCaml プログラム (main メソッドを使用 - 実行可能ファイルを生成) があり、それをライブラリとして使用したいと考えています。
私は次のようにプログラムをコンパイルしていました:ocamlc -I someDir -g -unsafe lotsOfCmoFiles -o outputFile
プログラムは正常に動作します。
今、私はそれを実行可能にする行(のようなもの)を削除し、コマンドをコンパイルするためのパラメータをlet _ = ...
追加しています:-a
ocamlc -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'