2012-04-25 2 views
4

でライブラリを使用するには、私は指示に従って使用してはocamlfindインストールサイト-libにライブラリをインストールし設定するための​​を追いました。私は2つのライブラリを持っていました:一つは論理と呼ばれ、もう一つはブールと呼ばれます。私はocamlbuild用いた論理とブール値に依存して別のプロジェクトをビルドするために行ったとき、私は、その後「インストールはocamlfind」を使用してOCamlのライブラリを設定して、ocamlbuild

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

:それぞれのケースで、私は例えば、ライブラリー内の.cmo、.cmx、.cmiと.mliファイルのファイルをインストール

$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. 

は、私は、サイト-libに、それぞれの領域に上の論理とブールプロジェクトから.oファイルをコピーし、それをコンパイルし、罰金リンク:次のエラーメッセージが表示されました。

私はなぜ.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) 
+0

私は詳細を知らない、しかしocamloptは、ネイティブコンパイラです。 .oファイルと.cmxファイルの両方を生成します。彼らはペアで一緒に保つ必要があります。 ocamloptはリンカを内部的に実行することによってリンクを行い、しばしばgccをリンカとして使います。 -verboseフラグを付けて実行するコマンドを見ることができます。 –

+0

ライブラリ内の.cmxファイル(site-lib/logicおよびsite-lib/boolean)で十分ではありませんか? – aneccodeal

+0

さて、ocamloptはそのようには機能しません。 .oファイルには生成されたコードがすべて含まれています。 .cmxファイルは単なるメタ情報です。これは、.oファイルに対して標準のUnixツールを使うだけでよいので便利です。たとえば、特別なリンカーは必要ありません。 –

答えて

4

Section 11.1 of the OCaml Manual参照:ネイティブオブジェクトコードを含む、XO:ファイルx.mlから

を、ocamloptコンパイラは、2つのファイルを作成しますx.cmxには、ユニットのクライアントのリンクと最適化のための追加情報が含まれています。コンパイルされた実装は常にx.cmxという名前で参照されるべきです(.oまたは.objファイルが与えられた場合、ocamloptはCamlからではなくCからコンパイルされたコードを含むと仮定します)。

関連する問題