Я пытаюсь скомпилировать сервер XML-RPC, написанный с использованием библиотеки xmlrpc-light в OCaml, с помощью 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
, например , этот и файл _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 ( diff репозитория ), которое предполагает, что оно может иметь отношение к количеству используемых потоков. И, фактически, я использую Mutex где-то в моем коде (проверьте код server.ml
и client.ml
в этот другой вопрос ). Если я уберу материал Mutex из моего server.ml
, ошибка все равно произойдет. Но если я дополнительно удалю pkg_threads
из файла _tags
, то все компилируется. Итак, я пришел к выводу, что я не могу напрямую использовать библиотеку потоков с xmlrpc-light
, что странно.