0

在编译 OCaml 应用程序时,我收到以下错误:

  File "/tmp/ocamlpp466ee0", line 308, characters 34-233:
  Error: Signature mismatch:
   ...
   The field `unlock' is required but not provided
   The field `lock' is required but not provided
  Command exited with code 2.

我的猜测是该错误与 OCaml 库 Datalog 相关(我已从此处安装了 0.3 版),因为文件中的第 308 行是 /tmp/ocamlpp466ee0 以下代码中的第一个

module Logic = Datalog.Logic.Make(struct
  type t = atom
  let equal = eq_atom
  let hash = hash_atom
  let to_string a = Utils.sprintf "%a" pp_atom a
  let of_string s = atom_of_json (Json.from_string s)
end)

如果有人可以帮助我知道我做错了什么,我将不胜感激。

此外,我想不明白为什么每次执行“make”时都会生成文件/tmp/ocamlpp466ee0?我试图通过阅读 Makefile 来理解,但没有成功。

4

1 回答 1

2
  1. 我认为 Datalog 库中发生了一些变化,并且在某些版本 > 0.3 的仿函数中Datalog.Logic.Make需要带有值lockunlock声明的模块参数。所以,是版本问题。

  2. 关于临时文件。如您所见,它的名称由ocaml字面量组成,pp即预处理器和一些数字。OCaml 中的预处理器通常以这种方式工作:它们读取输入源文件并写入输出源文件。这就是创建一些临时文件的原因。

于 2013-10-15T14:44:05.797 回答