我正在编译一个用OCaml编写的工具框架,并且是解释OCaml的新手。运行scons
时收到此错误:
ocamlc.opt -dtypes -I instrumentor -I ocaml -I ./cbi/cil/cil-1.4.0/obj/x86_LINUX
-w Ael -warn-error A -o instrumentor/phase.cmi -c instrumentor/phase.mli
File "instrumentor/phase.mli", line 1, characters 0-1:
Error: /u/j/o/joy/Desktop/cbi/cil/cil-1.4.0/obj/x86_LINUX/cil.cmi
is not a compiled interface
instrumentor / phase.mli的内容:
type phase = string * (Cil.file -> unit)
我正在使用OCaml 3.11.1。如果您可以提供修复此错误的提示,将会很有帮助。
正如下面提到的@gasche:错误可能是由于所用编译器之间的版本不匹配造成的。此链接http://ocaml.org/tutorials/common_error_messages.html包含更多信息和其他常见错误列表。
答案 0 :(得分:2)
疯狂的猜测,但这可能是:
构建系统中将无关文件复制到.cmi
的问题;你能看看有问题的cil.cmi
的内容,看看它是否显然不是cmi(例如文本文件)。您还可以使用ocamlobjinfo <file>
获取有关文件的信息,因为这些文件确实属于OCaml格式
Cil的编译文件与您为项目使用的编译器版本之间的版本差异(我希望编译器能够识别出这是一个有效的cmi,版本号错误,并提供更多信息错误信息,但你永远不知道)。确保使用与您当前使用的相同版本的OCaml生成的cil文件。