尽管 ocamlfind 看到了所需的模块,但 ocamlopt 和 ocamlbuild 给出了未绑定模块错误

ocamlopt and ocamlbuild give an Unbound module error despite ocamlfind seeing the required module

我正在尝试从 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 的新手,我不知道还能尝试什么。

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

./configure
make build

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

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

opam pin add vchan .

并对 opam 要求的任何事情都回答是。

ocamlbuild -use-ocamlfind -package cmdliner xencat.byte

?