我試圖編譯xml-rpc-light ocaml軟件包的adder example。包括(我懷疑所有)必要的庫後,我在彙編時出現此錯誤:並行安裝不同的ocaml版本
File "_none_", line 1, characters 0-1:
Error: Files /[...]/godi/lib/ocaml/site-lib/xmlrpc-light/xmlrpc-light.cma(XmlRpcBase64)
and /[...]/godi/lib/ocaml/std-lib/stdlib.cma(Buffer)
make inconsistent assumptions over interface Buffer
Command exited with code 2.
我明白這是什麼意思。基本上,不知何故,xmlrpc-light.cma和stdlib.cma不會假設相同的緩衝區接口,並且這會在編譯時產生類型錯誤。但是,如何在不改變這些庫的代碼的情況下協調它們呢?
編輯後Ygrek的和Gasche的答案
從兩個答案我想我知道問題是什麼,但現在我真的不知道該如何處理它。我使用GODI,並且通常在那裏編譯(3.11.2版本)。最近,我獨立安裝了OCaml 3.12來玩它。現在,如果我去一個新的命令行,並寫ocaml
,它是這個新的啓動3.12。目前,在GODI中,所有東西仍然像往常一樣工作(或幾乎 - 見下文),但如果我想安裝一些非GODI庫(如xmlrpc-light),則必須使用命令行。如果我嘗試使用make
編譯xmlrpc的光,我得到:
ocamlfind ocamlc -package xml-light,netclient,nethttpd-for-netcgi2 -c XmlRpc.mli
File "XmlRpc.mli", line 1, characters 0-1:
Error: /[...]/godi/lib/ocaml/pkg-lib/xml-light/xml.cmi
is not a compiled interface
make[1]: *** [XmlRpc.cmi] Error 2
make: *** [native-code-library] Error 2
爲什麼它尋找到GODI庫這裏,儘管可以在命令行中OCaml的是非GODI 3.12究其原因,是那ocamlfind
實際上調用/[...]/godi/bin/ocamlfind
。我可以理解爲什麼3.12 ocaml關於xml.cmi的投訴不是一個編譯接口(它是用GODI - 3.11.2編譯的)。總之,我的系統目前一團糟。我不知道如何保持兩個ocaml環境(GODI和3.12),並且每次選擇我想使用的環境。但如果能解決我所有的問題,我很樂意刪除3.12。
問題的GODI
只給一些更多的信息,我最近嘗試添加了godi-ocaml-xml-rpc
庫(因爲它是另一種XML-RPC庫,它在GODI的可用),但我得到
> ocamlfind ocamlopt -a -o xmlrpc.cmxa \
> -predicates "" xmlRPCTypes.cmx xmlRPCDtd.cmx xmlRPCNet.cmx xmlRPCClient.cmx xmlRPCServer.cmx cgiSource.cmx
> ocamlfind ocamlopt -o oxridl.opt -package "pcre annexlib" -linkpkg oxridl.ml
> cd /[...]/godi/build/godi/godi-ocaml-xml-rpc/work/ocaml-xml-rpc-0.2.6/httpd && make && make opt
> ocamlfind ocamlc -c -I .. httpdSource.mli -package "http annexlib"
> File "httpdSource.mli", line 1, characters 0-1:
> Error: ../xmlRPCServer.cmi
> is not a compiled interface
> make[7]: *** [httpdSource.cmi] Error 2
> Error: Exec error: File /[...]/godi/build/godi/godi-ocaml-xml-rpc/./makefile, line 38: Command returned with non-zero exit code
> Error: Exec error: File /[...]/godi/build/godi/godi-ocaml-xml-rpc/./../../mk/bsd.pkg.mk, line 1378: Command returned with non-zero exit code
### Error: Command fails with code 1: godi_console
我懷疑可能會遇到同樣的問題。奇怪的是,它是抱怨xmlRPCServer.cmi
不是一個編譯接口,我認爲,它恰好是它應該編譯的文件之一來安裝godi-ocaml-xml-rpc。
感謝您的幫助!我編輯了我的答案並添加了更多信息。有什麼想法嗎? – Surikator
更新了答案。 – ygrek
謝謝!那裏有兩個獨立的ocamlfinds。問題是,一切都在PATH中,正如你指出的那樣,它使用一個ocamlfind和另一個ocaml安裝。全部排序! – Surikator