あるときに提供されていないのNetsysの実現を訴えてコンパイルに失敗したが、私は得る:OCamlbuildは、それは私がocamlbuildでOCamlので<a href="http://code.google.com/p/xmlrpc-light/" rel="nofollow noreferrer">xmlrpc-light library</a>を使用して書かれた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.
注意をそのI (同じCLのclient.native
のためにこのプラグインは、他のケースでは私のためにうまく働いてい
<server.ml> or <server.native>: pkg_unix,pkg_netsys,pkg_xmlrpc-light,pkg_threads
:this oneようmyocamlbuild.ml
ファイルおよび単一の行を含む_tags
ファイルを持っていますient/serverアプリケーションなど)では使用できませんが、server.native
では使用できません。この苦情は、ライブラリNetsysがコンパイラで利用できないことを示唆しています。しかし私たちは得る
$ ocamlfind query netsys
/usr/lib/ocaml/netsys
/usr/lib/ocaml/netsys
に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を使っています(server.ml
とclient.ml
のコードをthis other questionにチェックしてください)。私がserver.ml
からMutexのものを取り除くと、それでもエラーが発生します。しかし、_tags
ファイルからpkg_threads
をさらに削除すると、すべてがコンパイルされます。だから私の結論は、xmlrpc-light
というスレッドライブラリを直接使うことはできないということです。これは変です。