ocsigenserver:main:引用未定义的全局`Https_client'

时间:2015-02-21 20:11:03

标签: facebook ocaml ocsigen

我有一个名为Facebook.ml的文件,它使用Netclient库中的Https_client模块。我已将文件编译到Facebook.cmo,我可以在顶层和我编译的其他代码中使用所有函数而没有任何问题。

然而,ocsigenserver无法在Netclient库中找到Https_client模块,当我用make test.byte测试我的ocsigen版本时,我收到了错误

 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 个答案:

答案 0 :(得分:3)

您有各种解决方案:

  • 您似乎正在使用eliom-distillery makefile。如果是这样,请不要自行修改.conf,而是修改Makefile.options。在SERVER_FILES中添加文件,在SERVER_PACKAGES中添加所需的库。它还将自行编译您的文件。
  • 自行编译,但添加-linkall
  • 正如PatJ所说,添加<extension findlib-package="netclient"/>以使ocsigenserver加载netclient库。

我强烈建议第一个。

另外,如果你想要一个http客户端,有one inside ocsigenserver但是你应该使用cohttp(特别是考虑到ocsigenserver本身很快就会使用它)。

答案 1 :(得分:1)

Ocsigen尝试动态链接.cmo,但尚未加载netclient库。

因此,您可以将文件库添加到ocsigen应加载的文件中,或仅引用ocsigen模块。