2010-09-15 63 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,因爲它爲您處理所有這些。