【问题标题】:ocamlopt and ocamlbuild give an Unbound module error despite ocamlfind seeing the required module尽管 ocamlfind 看到了所需的模块,但 ocamlopt 和 ocamlbuild 给出了 Unbound module 错误
【发布时间】:2016-03-04 21:21:33
【问题描述】:

我正在尝试从 this project 构建 xencat 工具。当我尝试使用ocamlopt 构建它时,我得到了

$ 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 的新手,我不知道还有什么可以尝试的。

【问题讨论】:

  • 试试ocamlfind ocamlopt -package cmdliner -o xencat xencat.ml
  • 理想情况下,您应该使用 opam 来安装它。这个包有几十个依赖项,在你构建这个文件之前应该满足这些依赖项。所以,首先你需要安装它们,大概是使用 opam

标签: ocaml ocamlbuild mirage


【解决方案1】:

ocamlbuild -use-ocamlfind -package cmdliner xencat.byte

?

【讨论】:

  • 有点进步!现在我收到了一个新的未绑定模块错误,但我认为它告诉我我需要构建整个项目,而不仅仅是这个特定的文件。你能解释一下为什么需要添加-package 参数吗?我希望 ocamlbuild 自己找到包。
  • 我所知道的任何 OCaml 工具都不会尝试推断您正在使用哪些 ocamlfind 包(通常没有从 OCaml 模块名称定义明确的映射,编译和构建工具会看到,到 ocamlfind 包)。你必须明确地传递它们。
【解决方案2】:

要构建此项目,请在项目的根目录下使用以下命令:

./configure
make build

您会在根文件夹中找到一个xencat.native 文件。

您也可以使用opam 来构建它,因为opam 会为您处理所有依赖项。只需到项目的根目录下说:

opam pin add vchan .

并对 opam 要求做的任何事情回答“是”。

【讨论】:

  • 尝试了你的第一个建议,我得到了make build W: Cannot find source file matching module 'vchan' in library vchan Finished, 0 targets (0 cached) in 00:00:00. Finished, 40 targets (39 cached) in 00:00:00.
  • 我最终做了oasis setup-cleanmake clean./configure --xenctrl=truemake。二进制文件已创建。
猜你喜欢
  • 2022-12-21
  • 2014-06-13
  • 1970-01-01
  • 2014-09-14
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2019-09-17
相关资源
最近更新 更多