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.ml
server.ml
pkg_threads
_tags
xmlrpc-light