1

我正在尝试使用 OCAML 编译器(版本 4.01.0)和 GNU make 4.0 编译统一源。源代码取自链接(http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.27.57/

我提取了 tar.gz,然后按照用户手册(http://www.seas.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual )中的说明编写了命令“make NATIVE=false” .html ) 请参阅从头开始构建统一窗口部分。

代码开始编译几秒钟但停止并出现以下错误:

----------

File "/cygdrive/c/unison_build/unison-2.27.57/update.ml", line 1:
Error: The implementation /cygdrive/c/unison_build/unison-2.27.57/update.ml
does not match the interface update.cmi:
...
In module NameMap:
The field `split' is required but not provided
In module NameMap:
The field `choose' is required but not provided
In module NameMap:
The field `max_binding' is required but not provided
In module NameMap:
The field `min_binding' is required but not provided
In module NameMap:
The field `bindings' is required but not provided
In module NameMap:
The field `cardinal' is required but not provided
In module NameMap:
The field `partition' is required but not provided
In module NameMap:
The field `filter' is required but not provided
In module NameMap:
The field `exists' is required but not provided
In module NameMap:
The field `for_all' is required but not provided
In module NameMap:
The field `merge' is required but not provided
In module NameMap:
The field `singleton' is required but not provided
Makefile.OCaml:339: recipe for target 'update.cmo' failed
make: *** [update.cmo] Error 2

4

3 回答 3

3

我得到了完全相同的错误(使用 ocaml 3.12)并通过update.mli如下修补文件解决了它(第 4 行):

-module NameMap : Map.S with type key = Name.t
+module NameMap : MyMap.S with type key = Name.t

请注意,这是一个已知错误(错误 #585453),我从此处的 debian 包(文件0005-Fix-build-with-OCaml-3.12.patch)中获得了补丁。该补丁至少对 2.27.57 和 2.32.52 有效。在同一个包中,您似乎还可以找到 Ocaml 4 的补丁。

于 2015-12-30T00:13:19.290 回答
1

你应该用 OCaml 3.12 编译 Unison,它不会用以后的编译器编译。Nate Unison 不再处于积极开发阶段:

Unison 不再作为一个研究项目在积极开发中。在这一点上,没有人的工作是添加新功能、修复错误或回答问题。

报价来自网站。

于 2014-09-24T17:22:18.037 回答
0

如果您使用不同版本的 OCaml 编译器编译 update.ml,则可能会出现此错误,您清除 _build 目录并从头开始重试。

于 2014-09-22T09:32:56.373 回答