在编译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(我从here安装了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来理解,但我没有成功。
答案 0 :(得分:2)
我认为Datalog库和某些版本>中的内容已经发生了变化。 0.3仿函数Datalog.Logic.Make
需要声明值lock
和unlock
的模块参数。所以,这是版本问题。
关于临时文件。如您所见,它的名称由ocaml
文字,pp
组成,这意味着预处理器和一些数字。 OCaml中的预处理器通常以这种方式工作:它们读取输入源文件和写入输出源文件。这就是创建一些临时文件的原因。