1

我有 ocaml 3.12,一年没用,现在从 git 升级到 4.03(自己编译)。我在网上看到一些评论说这个版本不包括camlp4o,我的是2010年的,当时我还没有安装ocaml。问题是我因此无法编译程序。我在硬盘驱动器上转到该文件,我没有发现任何问题,但是如果我尝试从终端执行,我会得到这个

79-116-202-72:ocaml Cristi$ camlp4o
Fatal error: the file '/usr/local/bin/camlp4o' is not a bytecode executable file

其他 caml 文件也是如此。希望这能解决我的问题,我该如何更新它们?我正在使用 osx。谢谢!

4

2 回答 2

4

从 OCaml 4.02.0 (尚未发布!)开始,CamlP4 已从编译器源代码中删除。如果您从 4.01.0 或之前的 4.02.0 或更高版本升级您的 OCaml 安装,可能会发生以下情况:

  • 旧版本的 OCaml 编译器工具集被新版本覆盖,包括字节码解释器 ocamlrun,Camlp4 除外
  • 旧版本的CamlP4 字节码可执行文件 ( camlp4o, camlp4of, ...)保持原样。

在这种情况下,如果您键入camlp4o,则它的旧运行时字节码由新的 ocaml 字节码解释器执行ocamlrun。不幸的是,它不理解旧的字节码。(我想这是故意的。)

解决方法是通过新编译器安装 CamlP4。源代码现在可在https://github.com/ocaml/camlp4获得。

还有一些其他可能的情况。例如,如果您手动安装 OCaml 4.01.0,然后使用 4.01.0 安装 OPAM,然后将编译器更改为 4.02.0 opam switch。在这种情况下,修复也是通过opam install camlp4命令使用新编译器安装 CamlP4。

于 2014-06-05T11:05:40.187 回答
2
  1. 最好使用 OCaml 4.02,因为它将在今年夏天发布。4.03 现在还年轻
  2. 最好使用 Opam 安装 ocaml,更具体的是使用opam switch -aand opam switch compilername。Camlp4 也应该通过 Opam 安装。
  3. 当您拥有更新 OCaml 字节码版本的字节码解释器时,您可能会执行 camp4o。这就是为什么它不能正确识别它的原因。
于 2014-06-05T10:35:11.777 回答