我的问题是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
..。无济于事。
我做错了什么?
发布于 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
https://stackoverflow.com/questions/3848897
复制相似问题