我是 Ocaml 的新手,正在尝试编写一些小型示例应用程序。我ocamlc在 Linux Ubuntu 10.04 下使用 3.11.2 版本。我想编译两个文件:
a.ml
b.ml
文件b.ml使用来自a.ml. 据我了解,我只能ocamlc -c用来执行编译。当我拥有所有文件以将它们链接到可执行文件时,我可以ocamlc最后一次调用。.cmo此外,在编译使用来自另一个文件的定义的文件时,我必须告诉编译器在哪个.cmi文件中找到外部定义。
所以我的想法是使用:
ocamlc -i -c a.ml > a.mli
ocamlc -c a.mli b.ml
ocamlc -o b a.cmo b.cmo
第一步工作并生成文件a.mli和a.cmo,但是在运行第二步时我得到
File "b.ml", line 1, characters 28-31:
Error: Unbound value foo
wherefoo是在 中定义a.ml和调用的函数b.ml。
所以我的问题是:如何分别编译每个源文件并在命令行中指定要导入的接口?我一直在查看文档,据我所知,我必须指定.mli要包含的文件,但我不知道如何。
编辑
这里有更多细节。文件a.ml包含定义
let foo = 5;;
文件b.ml包含表达式
print_string (string_of_int foo) ^ "\n";;
真实的例子更大,但是有了这些文件,我已经有了上面报告的错误。
编辑 2
我已经编辑了文件b.ml并替换foo为并且这有效(即使我有另一个对这个问题并不重要的编译错误,A.foofoo 也是可见的)。b.ml我想.mli明确地编写我自己的文件会更干净,正如所建议的那样