模块和包的区别(Ocaml)

6

我基本上是在尝试跟随这篇stackoverflow答案,位于这篇文章中:

OCaml中最好的HttpRequest模块是什么

但我遇到了问题。当我尝试运行只有一个文件的时候,

open Lwt ;; 

我收到了一个错误,说这是一个未绑定的模块。我已经执行了以下 opam 指令:
opam install lwt

它确实安装了正确的

所以我认为问题在于模块和包之间的区别,我并不是很理解。我看了这个问题作为可能的答案,但我不确定它是否是我需要的。

OCaml中未绑定的模块

感谢大家的帮助,我是Ocaml的新手,正在尝试学习构建的各个方面。


你是如何编译它的?我建议使用_oasis(请参见http://oasis.forge.ocamlcore.org/quickstart.html)为您生成适当的构建脚本。 - ppolv
2个回答

5

要使用一个“包”,你必须明确告诉编译器。在OCaml中,未绑定的模块通常意味着两件事情之一:你输错了模块名称,或者你没有设置正确的模块搜索路径。你使用了哪些编译器选项?

如果你使用ocamlfind,则编译应该像这样:

ocamlfind ocamlc -package lwt -c mymodule.ml

这会告诉编译器除了默认的模块外,在lwt包安装目录下尝试查找模块。

如果你不使用ocamlfind……那就使用ocamlfind吧。


我尝试了你建议的方法。我检查了我是否已经使用opam安装了lwt包,然后运行了你上面提供的代码,但是我仍然得到了之前相同的错误提示:"找不到lwt包"。 - Lilluda 5
如果 "opam list lwt" 显示该软件包已安装,请尝试 "ocamlfind query lwt" 查看其模块路径。如果 ocamlfind 显示“未找到软件包'lwt'”,则说明您的环境配置不正确。请阅读 OPAM 文档并检查您的环境变量。无论如何,如果您想获得更好的答案,您必须提供更多您尝试过的细节。 - camlspotter

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接