在ocaml编译程序的问题

时间:2010-09-15 09:39:04

标签: functional-programming ocaml

我在编译用ocaml编写的程序时遇到问题,出现的错误是:错误:未绑定模块基础知识,我该如何解决这个问题? 我说这个语言的初学者。

整个代码中使用的

库是:          开放基础;;          开放Paritygame ;;          打开Univsolve ;;          打开Solvers ;;

包含模块的文件是:basics.ml basics.mli,paritygame.ml paritygame.mli,univsolve.ml univsolve.mli和solvers.ml solvers.mli .....

4 个答案:

答案 0 :(得分:7)

要编译字节代码,请使用ocamlc,然后按顺序从左到右依次需要的任何其他文件表示它们的依赖关系。这些文件可以是ocaml源代码文件,也可以是编译文件(cmo)。要将文件单独编译为cmo,您应该执行类似的操作,

ocamlc.opt -c -annot -o util.cmo util.ml
ocamlc.opt unix.cmo str.cmo util.cmo game.ml -o game

建议您在答案中包含用于尝试编译应用程序的字符串,这应该是常识。

  

整个代码中使用的库   是:开放基础;;开放Paritygame ;;   打开Univsolve ;;开放的Solvers ;;

     

包含模块的文件是:   basics.ml basics.mli,paritygame.ml   paritygame.mli,univsolve.ml   univsolve.mli和solvers.ml   solvers.mli .....

这些不称为库。这些是模块。库是cmo文件的集合,编译为cma以进行分发。但所有这一切,真的没有说明模块之间的依赖关系,告诉我们你在编译中做错了什么。我建议,一旦你掌握了一些这些基础知识,你就可以继续ocamlbuild。对于像这样的简单项目,它可以毫不费力地编译项目。它将解析依赖关系并仅编译自上次调用以来已更改的文件。

答案 1 :(得分:4)

您很可能无序地链接模块。如果您使用ocamlcocamlopt进行关联,请先basics.cmo/cmx

ocamlc -o my_exec basics.cmo univsolv.cmo paritygame.cmo solvers.cmo

(上述订单可能不正确 - 例如partiygame.cmo可能取决于solver.cmo,在这种情况下您应该切换订单。)

或者只使用ocamlbuild,因为它会为您完成所有这些工作。

答案 2 :(得分:3)

This thread在Caml论坛上可能有帮助。

答案 3 :(得分:0)

基础模块实际上是Camlserv的一部分,您需要先安装它。