如何使用opam安装特定版本的ocaml编译器

nor*_*rio 8 symlink ocaml package-managers unison opam

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

我快速浏览了一下opam文档,但是没有找到相关信息.

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

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

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'
Run Code Online (Sandbox Code Playgroud)

我不想出发寻求unix_has_symlink功能,并致力于探索图书馆依赖的沼泽,许多开发人员在文明来临之前已经倒下,并且发明了包裹管理者.

有没有什么, opam install ocamlc-4.04opam install all-packages


附录

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

ivg*_*ivg 19

要切换到特定版本的编译器吗

opam switch create <compiler-version>
Run Code Online (Sandbox Code Playgroud)

(注意:对于旧的opam 1.x来说opam switch <compiler-version>)

例如,

opam switch create 4.07.0
Run Code Online (Sandbox Code Playgroud)

要从特定版本开始,即首次安装opam时,请执行此操作

opam switch create <name> <compiler-version>
Run Code Online (Sandbox Code Playgroud)

例如,

opam switch create myproj 4.07.0
Run Code Online (Sandbox Code Playgroud)

列出可用的版本

opam init --compiler=<version>
Run Code Online (Sandbox Code Playgroud)

要看到更多,做

opam init --compiler=4.07.0
Run Code Online (Sandbox Code Playgroud)

  • 是的,从那时起 opam 改变了它的界面,所以我更新了这篇文章,以反映最新的界面 (2认同)