使用'ocamlfind install'设置Ocaml库,然后使用ocamlbuild中的库

时间:2012-04-25 06:09:25

标签: ocaml ocamlbuild ocamlfind

我按照here说明设置了使用ocamlfind install在site-lib中安装库。我有两个库:一个叫做逻辑,另一个叫做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)

1 个答案:

答案 0 :(得分:4)

请参阅Section 11.1 of the OCaml Manual

  

从文件x.ml中,ocamlopt编译器生成两个文件:x.o,包含本机对象代码和x.cmx,包含用于链接和优化单元客户端的额外信息。应始终在名称x.cmx下引用已编译的实现(当给定.o或.obj文件时,ocamlopt假定它包含从C编译而不是从Caml编译的代码)。