OCambuild не может скомпилировать жалобу на то, что реализация Netsys не предоставляется, когда она

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


person Surikator    schedule 22.07.2011    source источник


Ответы (1)


ИМХО equeue META неверен. Добавление netsys в зависимости устраняет вашу проблему:

sed -i 's/threads/netsys,threads/' /usr/lib/ocaml/equeue/META
person ygrek    schedule 27.07.2011