2013-03-07 69 views
1

我正在編譯一個用OCaml編寫的工具框架,並且是解釋OCaml的新手。OCaml:cil.cmi不是編譯的接口錯誤

type phase = string * (Cil.file -> unit) 

我使用的OCaml 3.11.1:運行scons當我收到此錯誤:instrumentor/phase.mli的

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 

內容。如果你能提供一些提示來解決這個錯誤,那將會很有幫助。


As @gasche如下所示:錯誤可能是由於所用編譯器之間的版本不匹配所致。此鏈接http://ocaml.org/tutorials/common_error_messages.html有一些更多的信息和其他常見錯誤的列表。

回答

2

亂撞,但這可能或者是:

  • 在構建系統的問題,即複製無關的文件轉換成.cmi;你能看看有問題的cil.cmi的內容,看它是否明顯不是cmi(例如文本文件)。您也可以使用ocamlobjinfo <file>獲取有關文件的信息,當它們確實處於OCaml格式時

  • Cil的編譯文件與您用於項目的編譯器版本之間的版本差異(我希望編譯器能夠識別這是一個錯誤版本號的有效cmi,並提供更多信息錯誤消息,但你永遠不知道)。確保cil文件是使用與當前使用的相同版本的OCaml生成的。

+0

第二個猜測是正確的!我錯過了用於cil和sampler的編譯器之間的版本差異。謝謝 ! – user655617 2013-03-07 12:25:46