【发布时间】:2014-06-05 07:10:57
【问题描述】:
我在 OCaml opam repository 中看到了 base-unix 包。它被描述为“随 OCaml 编译器分发的 Unix 库”。也与 OCaml 编译器一起分发的其他一些库没有自己的包。例如,str 库没有 base-str 包这样的东西。
为什么会有这样的差异?据我所知,在使用ocamlfind 或ocamlbuild 编译时,它们都需要在命令行上指定为包或库。
【问题讨论】:
我在 OCaml opam repository 中看到了 base-unix 包。它被描述为“随 OCaml 编译器分发的 Unix 库”。也与 OCaml 编译器一起分发的其他一些库没有自己的包。例如,str 库没有 base-str 包这样的东西。
为什么会有这样的差异?据我所知,在使用ocamlfind 或ocamlbuild 编译时,它们都需要在命令行上指定为包或库。
【问题讨论】:
带有 OPAM 包名称 base-XXX 的库是可选库:它们来自 OCaml 编译器本身,但根据计算机环境、操作系统和编译器的构建配置标志,它们可能安装也可能不安装。例如,base-unix 的存在意味着 unix 库在该环境中可用。
另一方面,str 库不依赖于系统,因此可以在任何安装 OCaml 的地方使用。因此 OPAM 不需要显式提供其基础包来告知库的存在。
虽然所有 OCaml 安装都存在 str,但它的链接不是自动的。这就是 ocamlfind 需要一个包的原因。
OPAM 软件包用于通过 opam 命令安装。 OCamlFind 包用于链接。它们相关但不同。令人困惑,但这就是我们目前在 OCaml 生态系统中所拥有的。
【讨论】: