これは簡単な ocaml ファイルです。これは、Batteries ライブラリを使用するプログラムを ocamltop にロードする方法を理解してもらうためのものです。
batteryassault.ml
open Batteries
let main = print_string "hello, world ... powered on"
これをバイトコードにコンパイルします
ocamlfind ocamlc -package batteries -linkpkg batteryassault.ml
結果は batteryassault.cmo と batteryassault.cmi になり、エラーも警告もありません。次に、バッテリー駆動の ocamltop を起動します。
rlwrap ocamlfind batteries/ocaml
最後に、ファイルを ocamltop にロードするには:
#load "batteryassault.cmo" ;;
そして、エラーが発生します。
ファイル batteryassault.cmo と /usr/lib/ocaml/batteries/batteries.cma はインターフェース Batteries について意見が一致していません
Ubuntu がバッテリー 2.2.1 をインストールしている可能性があると思いますが、何らかの理由で (merlin をインストールしていますか?) opam フォルダーにバッテリー 2.3.1 がインストールされています。さらに、上記のようにバッテリーを使用して ocamltop を起動すると、 ocamltop が 2.2.1 バージョンを使用していることを示します。さらに、でコンパイル
ocamlfind ocamlc -package batteries -linkpkg batteryassault.ml -verbose
ocamlc は間違いなく opam のライブラリ、つまり 2.3.1 バージョンを使用していることがわかります。
だから私の質問は次のとおりです。/回避策は何ですか?