2010-09-15 69 views
1

程序编译我有写编译OCaml中的程序问题,似乎我的错误是:错误:未绑定模块基础知识,我怎么能解决这个问题? 我说这个语言的初学者。整个代码中使用问题OCaml中

库是: 开放的基础;; open Paritygame ;; open Univsolve ;; open Solvers ;;包含模块

文件是:basics.ml basics.mli,paritygame.ml paritygame.mli,univsolve.ml univsolve.mli和solvers.ml solvers.mli .....

回答

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 

建议您包括您用来尝试编译你的答案的应用程序的字符串,应该只是常识。

libraries used throughout the code are: open Basics ;; open Paritygame ;; open Univsolve;; open Solvers;;

files containing the modules are: basics.ml basics.mli, paritygame.ml paritygame.mli,univsolve.ml univsolve.mli and solvers.ml solvers.mli.....

这些不叫做库。这些是模块。一个库是编译成cma以供分发的cmo文件的集合。但是,所有这些都没有说明模块之间的依赖关系,以告诉我们在编译过程中你做错了什么。我建议,一旦你获得了这些基础知识,你就可以移动到ocamlbuild。对于这样简单的项目,它可以毫不费力地编译项目。它将解析依赖关系并仅编译自上次调用以来发生更改的文件。

0

基础知识模块实际上是Camlserv一部分,你需要首先安装。

4

很有可能您将这些模块按顺序链接在一起。如果你正在使用ocamlcocamlopt链接,把basics.cmo/cmx第一:

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

(上面的顺序可能是不正确的 - 例如partiygame.cmo可能取决于solver.cmo在这种情况下,你应该切换顺序)

或只是使用ocamlbuild,因为它为您处理所有这些。