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.