2016-03-04 47 views
2

我試圖從this project建立xencat工具。當我嘗試使用ocamlopt建造它,我得到儘管ocamlfind看到所需的模塊ocamlopt和ocamlbuild給出了一個未綁定的模塊錯誤

$ ocamlopt -o xencat xencat.ml 
File "xencat.ml", line 1, characters 5-13: 
Error: Unbound module Cmdliner 

以下指導意見here,我確認已安裝的cmdliner並且它是可見的ocamlfind,然後再次嘗試:

這裏是ocamlfind list節目:

$ ocamlfind list 
bigarray   (version: [distributed with Ocaml]) 
bytes    (version: [distributed with OCaml 4.02 or above]) 
... 
cmdliner   (version: 0.9.8) 
... 

沒有運氣:

$ ocamlfind ocamlopt -o xencat xencat.ml 
File "xencat.ml", line 1, characters 5-13: 
Error: Unbound module Cmdliner 

在此之後的一頁,我試過ocamlbuild:

$ocamlbuild -use-ocamlfind xencat.byte 
+ ocamlfind ocamlc -c -o xencat.cmo xencat.ml 
File "xencat.ml", line 1, characters 5-13: 
Error: Unbound module Cmdliner 
Command exited with code 2. 

顯然,我失去了一些東西,但作爲新ocaml的,我不知道還有什麼嘗試。

+0

嘗試'ocamlfind ocamlopt -package cmdliner -o xencat xencat.ml'。 – RichN

+1

理想情況下,您應該使用opam進行安裝。這個包有幾十個依賴關係,在構建這個文件之前應該滿足。因此,在首先你需要安裝它們,想必使用OPAM – ivg

回答

2

ocamlbuild -use-ocamlfind -package cmdliner xencat.byte

+0

有一點進展!現在我得到一個新的Unbound模塊錯誤,但我認爲它告訴我需要構建整個項目,而不僅僅是這個特定的文件。你能解釋爲什麼添加'-package'參數是必要的嗎?我期望ocamlbuild能夠自己找到軟件包。 –

+1

我所知道的任何OCaml工具都不會嘗試推斷出您正在使用的ocamlfind軟件包(通常沒有OCaml模塊名稱的精心定義的映射,編譯和構建工具會將這些名稱映射到ocamlfind軟件包)。你必須明確地通過它們。 – gasche

1

要構建這個項目在項目的根目錄使用以下命令:

./configure 
make build 

你會發現一個xencat.native文件中的根文件夾。

您也可以使用opam來構建它,因爲opam將處理您的所有依賴關係。只要到項目的根目錄並說:

opam pin add vchan . 

並回答是任何opam要求做的事情。

+0

想你的第一個建議,我得到 '使建立 寬:找不到源文件庫vchan匹配模塊「vchan」 成品,0目標(0緩存)中00:00:00。 在00:00:00完成了40個目標(緩存了39個)。' –

+0

我最終做了'綠洲setup-clean','make clean','./configure --xenctrl = true'和'make'。二進制文件已創建。 –

相關問題