4

ocamlfind install を使用して site-lib にライブラリをインストールするように設定するには、こちらの手順に従いました。2 つのライブラリがありました。1 つは logic と呼ばれ、もう 1 つは boolean と呼ばれます。いずれの場合も、ライブラリに .cmo、.cmx、.cmi、および .mli ファイルをインストールしました。次に例を示します。

ocamlfind install boolean META boolean.cmo boolean.cmx boolean.cmi boolean.mli

次に、ocamlbuild を使用してロジックとブール値に依存する別のプロジェクトをビルドしようとすると、次のエラー メッセージが表示されました。

$ocamlbuild -use-ocamlfind test_logic.native -classic-display
...
/home/phil/godi-3.12.1.0/bin/ocamlfind ocamlopt -c -package boolean -package deriving-    ocsigen -package deriving-ocsigen.syntax -package logic -package oUnit -package unix -syntax   camlp4o -o test_logic.cmx test_logic.ml
/home/phil/godi-3.12.1.0/bin/ocamlfind ocamlopt -linkpkg -linkpkg -package boolean -package deriving-ocsigen -package deriving-ocsigen.syntax -package logic -package oUnit -package unix -syntax camlp4o vhdl.cmx fsm.cmx test_logic.cmx -o test_logic.native
+ /home/phil/godi-3.12.1.0/bin/ocamlfind ocamlopt -linkpkg -linkpkg -package boolean -package deriving-ocsigen -package deriving-ocsigen.syntax -package logic -package oUnit -package unix -syntax camlp4o vhdl.cmx fsm.cmx test_logic.cmx -o test_logic.native
gcc: /home/phil/godi-3.12.1.0/lib/ocaml/site-lib/logic/logic.o: No such file or directory
gcc: /home/phil/godi-3.12.1.0/lib/ocaml/site-lib/boolean/boolean.o: No such file or directory
File "caml_startup", line 1, characters 0-1:
Error: Error during linking
Command exited with code 2.

次に、ロジック プロジェクトとブール プロジェクトの .o ファイルを site-lib のそれぞれの領域にコピーし、コンパイルして正常にリンクしました。

なぜ .o ファイルが必要なのか、なぜ gcc がここに関与しているのか疑問に思っています。

役立つ場合に備えて、これが私の _tags ファイルです。

<*.ml> or "test_logic.native" or "test_loginc.byte": package(boolean),package(unix),     package(oUnit), package(deriving-ocsigen), package(deriving-ocsigen.syntax), syntax(camlp4o), package(logic)
4

1 に答える 1

4

OCaml マニュアルのセクション 11.1 を参照してください。

ファイル x.ml から、ocamlopt コンパイラは 2 つのファイルを生成します。ネイティブ オブジェクト コードを含む xo と、ユニットのクライアントのリンクと最適化のための追加情報を含む x.cmx です。コンパイルされた実装は、常に x.cmx という名前で参照する必要があります (.o または .obj ファイルが指定された場合、ocamlopt は、Caml ではなく C からコンパイルされたコードが含まれていると想定します)。

于 2012-04-25T06:40:26.797 に答える