2009-12-04 108 views
2

我在ocaml中編寫了一個應用程序。它由幾個模塊:ocamlc,模塊編譯

  • 的Util(util.ml)
  • 工作1(work1.ml) - 開放的Util
  • WORK2(work2.ml) - 開放的Util,太
  • 主(main.ml) - 打開所有的。

當我編譯它,使用ocamlc,模塊Work2編譯失敗,並且我得到有關來自Util的未綁定值的錯誤消息。 單獨的編譯也不起作用。 我做錯了什麼?

ocamlc -o app.out -vmthread -pp camlp4o.opt unix.cma threads.cma camlp4of.cma util.ml work1.ml work2.ml main.ml

謝謝!

+1

打造你應該張貼的錯誤。 – LB40 2009-12-04 15:02:17

回答

2

命令行上的文件順序在OCaml中很重要。您必須按照相關性順序放置這些文件。這可能是你遇到的問題。嘗試改變,直到它的工作文件的順序...

0

如果你有這些模塊如下所示:

module Util 
    ... 
end;; 

module Work2 
    open Util 
    ... 
end;; 

module Main 
    open Util;; 
    open Work2;; 
    ... 
end;; 

Module Work1 
    open Work2;; 
    ... 
end;; 

那麼該命令必須在方式,當每個模塊調用打開它找到打開模塊已經編譯器,在本例中abover的順序將是

的Util - > WORK2 - >工作1 - >主

注意ocaml的不支持模塊循環redundency,意味着你不能有

module Work1 
     open Work2;; 
end;; 

module Work2 
     open Work1;; 
end;; 

如果您的應用程序是一個有很多模塊的複雜一點,你可以使用Ocamldephttp://caml.inria.fr/pub/docs/manual-ocaml/manual027.html,它會找出圖形依賴你。

0

使用ocamlbuild,它通過魔法計算出依賴關係,構建在單獨的目錄中,可以輕鬆地與ocamlfind集成(從3.12開始),並且通常很棒。

創建_tags文件有:

true: thread, package(unix) 
<*.ml>: camlp4o 

而且隨着

ocamlbuild -use-ocamlfind main.byte