Я пытаюсь скомпилировать пример сумматора из пакета xml-rpc-light 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 почему-то не предполагают одинаковый интерфейс Buffer, и это приводит к ошибке типа во время компиляции.Но как я могу примирить их, не изменяя код этих библиотек?
Редактировать после ответов Игрека и Гаше
Из обоих ответов я думаю, что знаю, в чем проблема сейчас, но я не совсемуверен, как с этим бороться.Я использую GODI, и там все обычно компилируется (версия 3.11.2).Совсем недавно я установил OCaml 3.12 самостоятельно, чтобы поиграть с ним.Теперь, если я перейду к новой командной строке и напишу ocaml
, запускается именно этот новый 3.12.В настоящее время в GODI все по-прежнему работает как обычно (или почти - см. Ниже), но если я хочу установить некоторую не-GODI библиотеку (например, xmlrpc-light), я должен использовать командную строку.Если я попытаюсь скомпилировать xmlrpc-light, используя make
, я получу:
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.