我是 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.foo
foo 也是可见的)。b.ml
我想.mli
明确地编写我自己的文件会更干净,正如所建议的那样