OCamlbuild не успява да компилира оплакване, че изпълнението на 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)


IMHO Equeue META е грешен. Добавянето на netsys към зависимости коригира проблема ви:

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