我在 OCaml 中有多个编译单元,其中之一导致了一些问题。一个编译单元有两个文件 foo_one.mli 和 foo_one.ml,使用
ocamlc
时编译没有任何错误。另一个编译单元有两个文件 shoo.mli 和 shoo.ml。 shoo.ml 需要使用 foo_one 中的函数,因此在文件 shoo.ml 中我使用 open Foo_one
。为了进行编译,我使用命令 ocamlc foo_one.mli shoo.mli shoo.ml
,编译器返回错误:模块 Foo_one 不可用(Shoo 需要)。
我在 Ubuntu 版本 22.04 上使用 OCaml 版本 5.1.0,并且上述两个文件都使用
Effects
库(以防万一这会影响任何内容)。
导致此错误的原因是什么?如何解决?
我确保编译单元都位于同一目录中,一个编译单元中的文件具有相同的名称,并且大写我在 shoo.ml 中包含的模块的名称。
假设您已经编译了
foo_one.mli
和 foo_one.ml
:
ocamlc -c foo_one.mli foo_one.ml
那么你应该编译
shoo.ml
:
ocamlc foo_one.cmo shoo.mli shoo.ml
如果您提供了
-c
选项,您可以使用以下内容进行编译,因为您尚未链接两者。
ocamlc -c foo_one.mli shoo.mli shoo.ml