编译在 OCaml 中使用该模块的另一个文件时模块不可用

问题描述 投票:0回答:1

我在 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 中包含的模块的名称。

module ocaml
1个回答
0
投票

假设您已经编译了

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
© www.soinside.com 2019 - 2024. All rights reserved.