15

如何使用 opam(或其他包管理器)安装特定版本的 ocaml 编译器(和兼容包)?

我快速浏览了 opam 文档,但没有找到相关信息。

我需要 ocaml 编译器(最好是原生代码编译器)来构建 unison,一个用于文件同步的软件。我需要使用相同版本的 ocaml 在两台机器上构建一致,否则一致会发出错误并中止其职责(yiiii!)。

我尝试从 tar 球构建 ocaml 版本 4.04.0,然后使用它来构建一致,但是在其中一台机器上,一致的构建失败并显示错误消息,

make[1]: Entering directory '/home/norio/Downloads/unison/unison-2.48.4_expand/src'
ocamlc -o mkProjectInfo unix.cma str.cma mkProjectInfo.ml
File "mkProjectInfo.ml", line 1:
Error: Error while linking /home/norio/Downloads/unison/ocaml_for_unison/lib/ocaml/unix.cma(Unix):
The external function `unix_has_symlink' is not available
if [ -f `which etags` ]; then \
    etags *.mli */*.mli *.ml */*.ml */*.m *.c */*.c *.txt \
          ; fi 
make[1]: Leaving directory '/home/norio/Downloads/unison/unison-2.48.4_expand/src'

我不想出发去追求unix_has_symlink功能,并致力于探索许多开发人员在文明到来和包管理器被发明之前已经陷入的库依赖沼泽。

有没有类似的, opam install ocamlc-4.04opam install all-packages


附录

unix_has_symlink在运行 Linux Mint 18 Cinnamon 64 位的机器上观察到错误消息。这个函数是一些 unix/linux 库的一部分,而不是 ocaml 包的一部分吗?

4

1 回答 1

27

要使用特定版本的编译器创建开关,请执行

opam switch create <compiler-version>

(注意:旧的 opam 1.x 是opam switch <compiler-version>

例如,

opam switch create 4.07.0

或者,如果你想创建一个新的开关,它使用与其他开关相同的编译器,那么语法是

opam switch create <name> <compiler-version>

例如,

opam switch create myproj 4.07.0

请注意,如果<name>是文件夹,则将创建本地交换机,例如,opam switch ./myproj 4.07.0将直接在myproj文件夹中创建交换机。

要从特定版本开始,即,当您第一次安装 opam 时,只需执行

opam init --compiler=<version>

例如,

opam init --compiler=4.07.0

列出可用版本

opam switch 

要查看更多内容,请执行

opam switch list-available

要安装编译器的变体,例如带有 flambda 或时空的编译器,请使用以下通用语法,

opam switch create <switch-name> ocaml-variants.<version>+options <options>...

例如,

opam switch create myswitch ocaml-variants.4.13.0+options ocaml-option-flambda

用于opam search ocaml-options可用选项的完整列表。可以指定多个选项,例如,

opam switch create myswitch ocaml-variants.4.13.0+options ocaml-option-flambda ocaml-option-spacetime ocaml-option-static
于 2016-12-01T01:27:30.053 回答