ocsigenserver: main: ссылка на неопределенный глобальный `Https_client'

У меня есть файл с именем Facebook.ml, который использует модуль Https_client из библиотеки Netclient. Я скомпилировал файл в Facebook.cmo, и я могу без проблем использовать все функции на верхнем уровне и в другом коде, который я компилирую.

Однако ocsigenserver не может найти модуль Https_client в библиотеке Netclient, и когда я тестирую свою сборку ocsigen с make test.byte Я получаю ошибку

 ocsigenserver  -c local/etc/UC/UC-test.conf
 ocsigenserver: main: Fatal - While loading /home/.../Facebook.cmo: error while linking /home/.../Facebook.cmo.
 ocsigenserver: main: Reference to undefined global `Https_client'
 make: *** [test.byte] Error 52

Я добавил следующую строку в мой файл.conf.in:

 <library module="/home/.../Facebook.cmo" />

Я собираю Facebook.ml с

 ocamlfind ocamlc -thread -package core,equeue-ssl,netclient,lwt -linkpkg Facebook.ml

Что я делаю неправильно?


Следуя совету Drup, я обновил свой файл Makefile.options до

 PROJECT_NAME := UC

 # Source files for the server
 SERVER_FILES := UC.ml Facebook.cmo
 # Source files for the client
 CLIENT_FILES := $(wildcard *.eliomi *.eliom)

 # OCamlfind packages for the server
 SERVER_PACKAGES := home/alpha/.opam/4.01.0/lib/netclient/netclient.cma
 # OCamlfind packages for the client
 CLIENT_PACKAGES :=

Получение ошибки:

 Fatal error: exception Fl_package_base.No_such_package("home/alpha/.opam/4.01.0/lib/netclient/netclient.cma", "")
 make: *** [_server/Facebook.cmo] Error 2

Но я знаю, что файл существует по указанному пути к файлу. Нужно ли добавлять путь куда-нибудь еще?

2 ответа

Решение

У вас есть различные решения:

  • Вы, кажется, используете make-файл Eliom-винокурни. Если это так, не модифицируйте.conf самостоятельно, измените Makefile.options вместо. Добавить файл в SERVER_FILES и необходимые библиотеки в SERVER_PACKAGES, Он также скомпилирует ваши файлы сам.
  • Продолжайте компилировать самостоятельно, но добавьте -linkall
  • Как сказал ПатДж, добавьте <extension findlib-package="netclient"/> заставить ocsigenserver загрузить netclient библиотека.

Я настоятельно советую первый.

Кроме того, если вам нужен http-клиент, он есть внутри ocsigenserver, но вам, вероятно, следует использовать cohttp (особенно учитывая, что сам ocsigenserver скоро будет его использовать).

Ocsigen пытается динамически связать ваш.cmo, но он не загрузил библиотеку netclient.

Таким образом, вы можете либо добавить библиотеку в файлы, которые должен загрузить ocsigen, либо обращаться только к модулям ocsigen.

Другие вопросы по тегам