我在OCaml opam repository 中看到了base-unix
包。它被描述为“随OCaml编译器一起分发的Unix库”。也随OCaml编译器一起分发的其他一些库没有自己的软件包。例如,没有base-str
库的str
包之类的东西。
为什么会有这样的差异?据我所知,在使用ocamlfind
或ocamlbuild
进行编译时,都需要在命令行上将它们都指定为程序包或库。
最佳答案
OPAM程序包名称为base-XXX的库是可选库:它们来自OCaml编译器本身,但是取决于计算机环境,操作系统和编译器的构建配置标志,它们可能安装也可能未安装。例如,base-unix的存在意味着在该环境中可以使用unix库。
另一方面,str库与系统无关,因此可在安装OCaml的任何位置使用。因此,OPAM无需显式提供其基本包即可告知该库的存在。
尽管所有OCaml安装都存在str,但其链接不是自动的。这就是ocamlfind需要一个包装的原因。
OPAM软件包是通过opam命令安装的。 OCamlFind软件包用于链接。它们是相关的但有所不同。令人困惑的是,这是我们目前在OCaml生态系统中所拥有的。