【问题标题】:OCamlbuild fails to compile complaining implementation of Netsys is not provided when it isOCamlbuild 编译失败,抱怨 Netsys 的实现没有提供
【发布时间】:2011-07-22 01:59:05
【问题描述】:

我正在尝试使用 ocamlbuild 编译在 OCaml 中使用 xmlrpc-light library 编写的 XML-RPC 服务器,但我得到了:

$ ocamlbuild server.native
Finished, 0 targets (0 cached) in 00:00:00.
+ ocamlfind ocamlopt -linkpkg -package xmlrpc-light -package unix -package threads -package netsys -thread server.cmx -o server.native
File "_none_", line 1, characters 0-1:
Error: No implementations provided for the following modules:
         Netsys referenced from /usr/lib/ocaml/equeue/equeue.cmxa(Uq_engines)
Command exited with code 2.
Compilation unsuccessful after building 4 targets (3 cached) in 00:00:00.

请注意,我有一个 myocamlbuild.ml 文件,例如 this one 和一个包含单行的 _tags 文件:

<server.ml> or <server.native>: pkg_unix,pkg_netsys,pkg_xmlrpc-light,pkg_threads

这个插件在其他情况下对我来说很好用(例如,对于同一客户端/服务器应用程序的client.native)但不适用于server.native。投诉表明库 Netsys 对编译器不可用。但是我们得到

$ ocamlfind query netsys
/usr/lib/ocaml/netsys

表示netsys安装在/usr/lib/ocaml/netsys。检查该目录给了我:

$ ls /usr/lib/ocaml/netsys
META  libnetsys.a  netsys.a  netsys.cma  netsys.cmi  netsys.cmxa  netsys.mli

还有,

$ ocamlfind list | grep netsys
netsys              (version: 2.2.9)

因此,确实安装了一个名为 netsys 的库,它确实有一个 cmxa 文件可供使用,但出于某种奇怪的原因,ocamlbuild 抱怨没有为模块 Netsys 提供实现。 ocamlbuild 可以读取/usr/lib/ocaml/equeue/equeue.cmxa 的事实应该足以得出结论,就查找库而言,环境($PATH 等)一切都应该没问题。

这一切都在 Debian 6.0 中,我的 OCaml 的版本是 3.11.2。

经过一番浏览,我发现了一个svn commit message (repository diff),这表明它可能与使用的线程数有关。而且,事实上,我在代码中的某处使用了 Mutex(检查 this other question 中的 server.mlclient.ml 的代码)。如果我从server.ml 中删除 Mutex 内容,错误仍然会发生。但是,如果我另外从_tags 文件中删除pkg_threads,那么一切都会编译。所以,我的结论是我不能直接用xmlrpc-light的线程库,这很奇怪。

【问题讨论】:

    标签: ocaml ocamlbuild


    【解决方案1】:

    恕我直言,队列 META 错误。将 netsys 添加到依赖项可以解决您的问题:

    sed -i 's/threads/netsys,threads/' /usr/lib/ocaml/equeue/META
    

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 2011-01-08
      • 2011-11-29
      • 2020-08-29
      • 1970-01-01
      相关资源
      最近更新 更多