4

OCaml のxmlrpc-light ライブラリを使用して記述された XML-RPC サーバーを ocamlbuild でコンパイルしようとしていますが、次のようになります。

$ 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ようなファイルと、1行を含むファイルがあることに注意してください。_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 ファイルがありますが、いくつかの奇妙な理由で、モジュール Netsys に実装が提供されていないという ocamlbuild の苦情があります。ocamlbuild が読み取ることができたという事実は/usr/lib/ocaml/equeue/equeue.cmxa、ライブラリを見つけるという点で、環境 ($PATH など) に関してすべてが問題ないはずであると結論付けるのに十分なはずです。

これはすべて Debian 6.0 にあり、私の OCaml のバージョンは 3.11.2 です。

ブラウジングした後、svn commit メッセージ( repository diff ) を見つけました。これは、使用されているスレッドの数に関係している可能性があることを示唆しています。実際、コードのどこかで Mutex を使用しています (この他の質問のコードserver.mlとコードを確認してください)。Mutex のものを削除しても、エラーは引き続き発生します。しかし、さらにファイルから を削除すると、すべてがコンパイルされます。したがって、私の結論は、スレッド ライブラリを で直接使用できないということです。これは奇妙です。client.mlserver.mlpkg_threads_tagsxmlrpc-light

4

1 に答える 1

1

IMHO equeue META が間違っています。依存関係に netsys を追加すると、問題が修正されます。

sed -i 's/threads/netsys,threads/' /usr/lib/ocaml/equeue/META
于 2011-07-27T08:22:34.280 に答える