2016-03-04 45 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'。二进制文件已创建。 –

相关问题