2

我正在尝试在 MacOS 下进行非常基本的 OPAM 安装。使用 macports 我安装了以下软件包:

  1. 奥帕姆@1.2.0
  2. ocaml-findlib @1.5.5
  3. ocaml-camlp4 @4.02.0.1_1

当我这样做时opam init(不是以root身份,因为我只需要一个用户)。 opam switch显示我正在使用系统编译器:

system C system 系统编译器 (4.02.1)

然后我尝试通过 opam 安装“lwt”,它中途失败并出现错误:

# ocamlfind: Package `camlp4' not found
# W: Failure("Command ''/Users/lord/.opam/system/bin/ocamlfind' query -format %d camlp4 > '/var/folders/hh/h6kt24208xj44z0059_xd9rh0000gn/T/oasis-ca8248.txt'' terminated with error code 2")

这是我的opam list

# Installed packages for system:
base-bigarray           base  Bigarray library distributed with the OCaml compil
base-threads            base  Threads library distributed with the OCaml compile
base-unix               base  Unix library distributed with the OCaml compiler
camlp4         4.02.1+system  Camlp4 is a system for writing extensible parsers
ocamlfind              1.5.5  A library manager for OCaml

我注意到它有自己的 ocamlfind,而不是系统一。也许这就是导致错误的原因:

$ /Users/lord/.opam/system/bin/ocamlfind query -format %d camlp4
ocamlfind: Package `camlp4' not found

$ /opt/local/bin/ocamlfind query -format %d camlp4
/opt/local/lib/ocaml/camlp4

我在通过 OPAM 安装 OCAML 编译器和 CAMLP 之前尝试过,在这种情况下它可以工作,但让我感到困扰的是我有两个相同版本的编译器安装。如果可能,我宁愿使用系统 OCAML 编译器和 CAMLP。

4

1 回答 1

3

我不确定您的安装出了什么问题,也许您不应该安装ocaml-findlib,因为它们可能会以某种方式发生冲突。我稍后会看这个。目前,以下作品

$ sudo port install ocaml ocaml-camlp4 opam
$ opam init
$ opam install ocamlfind

这将导致工作安装:

$ ocamlfind query camlp4
/opt/local/lib/ocaml/camlp4
$ which ocamlfind
/Users/ivg/.opam/system/bin/ocamlfind

更新

我已经检查了我的假设,即 system'socamlfind可能与opam's 相冲突。它没有任何证据。即使您同时安装它们,一切正常:

$ sudo port install ocaml-findlib
$ opam init

系统ocamlfind运行良好:

$ ocamlfind query camlp4
/opt/local/lib/ocaml/camlp4
$ which ocamlfind
/opt/local/bin/ocamlfind

现在让我们尝试从 opam 安装它:

$ opam install ocamlfind

它也很好用:

$ ocamlfind query camlp4
/opt/local/lib/ocaml/camlp4
$ which ocamlfind
/Users/ivg/.opam/system/bin/ocamlfind

$ opam install lwt

工作得也很好。

所以,也许你移动到了错误的方向,你可以删除你的~/.opam并从头开始。而且,我希望你不要忘记用魔法激活你的 opam:

$ eval `opam config env`

命令。

于 2015-03-22T18:41:20.757 回答