我已经阅读了这个问题和其他相关的问题,但我的编译问题仍未解决。
我正在使用以下文件进行分离编译测试:
testmoda.ml
module Testmoda = struct
let greeter () = print_endline "greetings from module a"
end
testmodb.ml
module Testmodb = struct
let dogreet () = print_endline "Modul B:"; Testmoda.greeter ()
end
testmod.ml
let main () =
print_endline "Calling modules now...";
Testmoda.greeter ();
Testmodb.dogreet ();
print_endline "End."
;;
let _ = main ()
现在我生成了 .mli 文件。
ocamlc -c -i testmoda.ml >testmoda.mli
测试模块 testmoda.cmi 存在。
接下来,我成功创建了 .cmo 文件,没有出现错误:
ocamlc -c testmoda.ml
好的,那么请对testmodb.ml进行同样的操作:
strobel@s131-amd:~/Ocaml/ml/testmod> ocamlc -c -i testmodb.ml >testmodb.mli
File "testmodb.ml", line 3, characters 45-61:
Error: Unbound value Testmoda.greeter
再试一次:
strobel@s131-amd:~/Ocaml/ml/testmod> ocamlc -c testmoda.cmo testmodb.ml
File "testmodb.ml", line 3, characters 45-61:
Error: Unbound value Testmoda.greeter
其他组合也失败了。
我如何编译testmodb.ml和testmod.ml?我认为这应该很容易 - 不需要ocamlbuild / omake / oasis。
如果将这些文件拼接到一个文件中(需要添加所需空格),则排除文件中的语法错误,它可以编译并执行得很完美。
ocamlc -c testmoda.ml
命令将创建 .cmi 和 .cmo 文件,后者可用于编译 testmod.ml 文件——这是一种分离式编译。 - Str.ocamlc -c testmoda.ml;ocamlc -c testmodb.ml; ocamlc -o testmod testmoda.cmo testmodb.cmo testmod.ml
- Str.testmod.ml
也适用。 - Jeffrey Scofield