1

我正在编译一个用 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包含更多信息和其他常见错误列表。

4

1 回答 1

2

疯狂的猜测,但这可能是:

  • 您的构建系统中的一个问题,它将不相关的文件复制到.cmi; 您能否查看问题的内容,cil.cmi看看它是否显然不是 cmi(例如文本文件)。您还可以ocamlobjinfo <file>在文件确实为 OCaml 格式时获取有关文件的信息

  • Cil 的编译文件与您用于项目的编译器版本之间的版本差异(我希望编译器能够识别这是一个具有错误版本号的有效 cmi,并提供更多信息的错误消息,但您永远不会知道)。确保 cil 文件是使用与您当前使用的相同版本的 OCaml 生成的。

于 2013-03-07T10:19:01.620 回答