我正在尝试使用OCAML编译器(版本4.01.0)和GNU make 4.0编译同步源。源代码取自链接(http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.27.57/)
我解压缩了tar.gz然后写了命令" make NATIVE = false"如用户手册(http://www.seas.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html)中所述,请参阅从头开始构建unison部分。
代码开始编译几秒钟,但会出现停止和跟随错误:
----------
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

答案 0 :(得分: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
请注意,这是一个已知的错误(bug #585453),我从debian包here(文件0005-Fix-build-with-OCaml-3.12.patch
)获得了补丁。该补丁有效至少为2.27.57和2.32.52。在同一个软件包中,您还可以找到Ocaml 4的补丁。
答案 1 :(得分:1)
你应该用OCaml 3.12编译Unison,它不会用以后的编译器编译。否认Unison不再处于积极发展阶段:
作为研究项目,Unison不再处于积极发展阶段。在这一点上,没有人可以添加新功能,修复错误或回答问题。
报价来自网站。
答案 2 :(得分:0)
如果使用不同版本的OCaml编译器编译update.ml,则会发生此错误,清除_build目录并从头开始重试。