Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation 不同ocaml版本的并行安装_Compilation_Ocaml_Xml Rpc - Fatal编程技术网

Compilation 不同ocaml版本的并行安装

Compilation 不同ocaml版本的并行安装,compilation,ocaml,xml-rpc,Compilation,Ocaml,Xml Rpc,我正在尝试编译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 inco

我正在尝试编译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版本中编译。最近,我独立安装了OCAML3.12,只是为了使用它。现在,如果我转到一个新的命令行并编写ocaml,那么就是这个新的3.12启动了。目前,在GODI中,一切仍然正常或几乎正常工作——请参见下文,但如果我想安装一些非GODI库,如xmlrpc light,我必须使用命令行。如果我尝试使用make编译xmlrpc light,我会得到:

尽管命令行中可用的ocaml是非GODI 3.12,但它在这里查看GODI库的原因是ocamlfind实际上调用了/[…]/GODI/bin/ocamlfind。我可以理解为什么3.12 ocaml抱怨xml.cmi不是一个编译接口,它是用GODI-3.11.2编译的

总而言之,我的系统目前一团糟。我不知道如何保留两个ocaml环境GODI和3.12,并在每次选择使用哪一个。但如果3.12解决了我所有的问题,我很乐意删除它

戈迪的问题 为了提供更多信息,我最近尝试添加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时应该编译的文件之一。

请确保使用单一版本的ocaml编译器并重建xmlrpc

更新

简单的经验法则-为每个ocaml安装单独的ocamlfind,并确保在任何时间点路径中只有一个ocaml+ocamlfind。i、 e.将ocaml-3.12安装到/opt/ocaml-3.12中,并将新的ocamlfind安装到/opt/ocaml-3.12/bin中。然后,当您想要使用OCAML3.12时,只需使用PATH=/opt/ocaml-3.12/bin:$PATH,它将拾取ocamlfind和匹配的ocaml,所有ocamlfind安装将与系统ocaml分离。旧的ocaml安装将完全不受影响


可以使用单个ocamlfind和多个ocaml安装,但这更复杂,我不建议使用它-ocamlfind构建速度很快。

要在ygrek上展开一点回答:这可能意味着xmlrpc light是根据标准库的不同版本编译的。。而不是您系统上可用的。如果在安装xmlrpc light后重新安装了新的标准库,或者使用为其他系统编译的二进制xmlrpc light包,则可能会出现这种情况。解决方案可能是根据当前的标准库重建xmlrpc

这些接口版本控制问题很微妙,因为它们不符合C/C++接口决策中的定制;在这些语言中,当包接口发生更改时,默认情况下假定它与以前的接口兼容。在OCaml中,它们被认为是不兼容的,它们比较整个模块接口的散列,并且必须重新编译


大多数打包工具(例如GNU/Linux发行版)默认采用兼容的行为,并且没有适当的工具来确保在接口更改时重新编译。GODI是专门为OCaml设计的,它进行依赖性跟踪。如果您在GODI中升级一个包,它将重新编译所有依赖的包,Debian打包团队有一个方案来实现与他们的打包系统相同的行为。有关更多详细信息,请参阅本文。其他一些工具对此非常小心,但不幸的是,这并不是正常情况,仅使用发行版的软件包管理器可能仍然会出现此类错误。

谢谢您的帮助!我已经编辑了我的答案并添加了更多信息。有什么想法吗?谢谢你的帮助!我已经编辑了我的答案并添加了更多信息。有什么想法吗?谢谢!我确实在那里发现了两个不同的奥坎勒。问题是,正如您所指出的,所有内容都在路径中,它使用了其中一个的ocamlfind和另一个的ocaml安装。全部排序!
> 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