我在编译用ocaml编写的程序时遇到问题,出现的错误是:错误:未绑定模块基础知识,我该如何解决这个问题? 我说这个语言的初学者。
整个代码中使用的库是: 开放基础;; 开放Paritygame ;; 打开Univsolve ;; 打开Solvers ;;
包含模块的文件是:basics.ml basics.mli,paritygame.ml paritygame.mli,univsolve.ml univsolve.mli和solvers.ml solvers.mli .....
答案 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)
您很可能无序地链接模块。如果您使用ocamlc
或ocamlopt
进行关联,请先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的一部分,您需要先安装它。