首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OCaml中未绑定的模块

OCaml中未绑定的模块
EN

Stack Overflow用户
提问于 2010-10-03 14:56:08
回答 1查看 25.2K关注 0票数 18

我的问题是ocamlc和ocamlopt似乎拒绝查找通过apt-get安装的第三方库。当我试图将第三方模块集成到我自己的OCaml程序中时,我第一次遇到了这个问题,并很快将其归结为理解OCaml编译的个人失误。很快--然而--我发现自己在尝试按照别人的指令编译项目时遇到了同样的问题。

下面是最直接的例子。其他的都使用ocamlbuild,这会让事情变得有点混乱。

程序:http://groups.google.com/group/fa.caml/msg/5aee553df34548e2

编译:

$ocamlc -g -dtypes -pp camlp4oof -I +camlp4 dynlink.cma camlp4lib.cma -cc g++ llvm.cma llvm_bitwriter.cma minml.ml -o minml
File "minml.ml", line 43, characters 0-9:
Error:Unbound module Llvm

即使我给ocamlc提供了llvm文件的绝对路径,就像这样...

$ ocamlc -g -dtypes -pp camlp4oof -I +camlp4 dynlink.cma camlp4lib.cma -cc g++ /usr/lib/ocaml/llvm-2.7/llvm.cma /usr/lib/ocaml/llvm-2.7/llvm_bitwriter.cma minml.ml -o minml 

..。无济于事。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-04 02:38:13

您的命令要做两件事:编译minml.ml (将其转换为minml.cmo),然后将生成的对象链接到minml

编译模块需要依赖项的接口。接口包含类型检查器和代码生成器所需的类型信息;此信息在实现中不重复(此处为.cma)。因此,在编译阶段,llvm.cmi必须可用。编译器在include路径中查找它,因此您需要一个额外的-I +llvm-2.7 (-I /usr/lib/ocaml/llvm-2.7的缩写)。

链接阶段需要llvm.cma,它包含模块的字节码实现。在这里,您可以使用-I或提供完整路径,让ocamlc知道在哪里可以找到该文件。

ocamlc -g -dtypes -I +camlp4 -I +llvm-2.7 -pp camlp4oof -c minml.ml
ocamlc -g -cc g++ -I +camlp4 -I +llvm-2.7 dynlink.cma camlp4lib.cma llvm.cma llvm_bitwriter.cma  minml.cmo -o minml

或者,如果您想在一个命令中同时执行这两个阶段:

ocamlc -g -dtypes -cc g++ -I +camlp4 -I +llvm-2.7 dynlink.cma camlp4lib.cma llvm.cma llvm_bitwriter.cma -pp camlp4oof minml.ml -o minml
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3848897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档