我是Ocaml的新手,并试图编写一些小的示例应用程序.我ocamlc在Linux Ubuntu 10.04下使用3.11.2版.我想编译两个文件:
a.ml
b.ml
Run Code Online (Sandbox Code Playgroud)
文件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
Run Code Online (Sandbox Code Playgroud)
第一步的工作和生产文件a.mli和a.cmo,但在运行第二步,当我得到
File "b.ml", line 1, characters 28-31:
Error: Unbound value foo
Run Code Online (Sandbox Code Playgroud)
where foo是在其中定义a.ml和调用的函数b.ml.
所以我的问题是:如何单独编译每个源文件并指定要在命令行上导入的接口?我一直在查看文档,据我所知,我必须指定.mli要包含的文件,但我不知道如何.
编辑
这里有更多细节.文件a.ml包含定义
let foo = 5;;
Run Code Online (Sandbox Code Playgroud)
文件b.ml包含表达式
print_string (string_of_int foo) ^ "\n";;
Run Code Online (Sandbox Code Playgroud)
真实的例子更大但是有了这些文件,我已经有了上面报告的错误.
编辑2 …