4

我按照此处的说明使用 ocamlfind install 在 site-lib 中设置安装库。我有两个库:一个称为逻辑库,另一个称为布尔库。在每种情况下,我都在库中安装了 .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 编译器生成两个文件:xo,包含本机目标代码,和 x.cmx,包含用于链接和优化单元客户端的额外信息。编译后的实现应始终以名称 x.cmx 引用(当给定 .o 或 .obj 文件时,ocamlopt 假定它包含从 C 编译的代码,而不是从 Caml 编译的代码)。

于 2012-04-25T06:40:26.797 回答