使用外部库编译ocaml代码的不同方法

时间:2011-09-21 19:07:23

标签: compilation ocaml

我已经安装了一些库,并且正在尝试编译代码。

1)ocamlc -I /usr/lib -I /usr/local/lib/ocaml/3.11.2/apron -I /usr/local/lib/ocaml/3.11.2/gmp -c mlexample2.ml生成mlexample2.cmimlexample2.cmo

2)ocamlopt -I /usr/lib -I /usr/local/lib/ocaml/3.11.2/apron -I /usr/local/lib/ocaml/3.11.2/gmp -o mlexample2.opt生成mlexample2.cmx

3)但是,如果我遵循this page的本机代码编译: ocamlopt -I /usr/lib -I /usr/local/lib/ocaml/3.11.2/apron -I /usr/local/lib/ocaml/3.11.2/gmp -o mlexample2.opt \ bigarray.cmxa gmp.cmxa apron.cmxa boxMPFR.cmxa polkaMPQ.cmxa mlexample2.ml返回File "mlexample2.ml", line 1, characters 0-1: Error: Cannot find file bigarray.cmxa,其中usr/lib代表文档中的$APRON/lib。但是big.array.cmxa实际上在/usr/lib/ocaml/bigarray.cmxa。顺便说一句,此命令会生成.cmi.cmx.o

所以我的问题是:

我如何从1 {1}}和.cmi进步?

我怎样才能从.cmo 2进步

我可以对3)

中的错误做些什么

有人可以帮忙吗?非常感谢你!

Edit1: 2)应该是:.cmx生成ocamlopt -I /usr/lib -I /usr/local/lib/ocaml/3.11.2/apron -I /usr/local/lib/ocaml/3.11.2/gmp -c mlexample2.ml.cmi.cmx

1 个答案:

答案 0 :(得分:2)

从你的其他问题来看,似乎你有一些样本行要编译,只是盲目地走路而不理解编译选项。

1)你的编译行有-c选项。此选项不链接,因此它允许某人编译单个模块并在以后链接它们。这有助于将项目构建为多个部分并进行更新,以便更快地进行最终编译。因此,传递给ocamlc-c选项会生成您的cmicmo,符合字节码的模块。

2)您在示例编译行中缺少某些内容 - 它没有提及有关生成其他文件的任何内容。我假设你也使用-c选项。这是因为.cmx也是一个已编译的模块,但是通过ocamlopt本地编译。

3)这应该是一个非常明显的编译错误。您所包含的目录中bigarry.cmxa所在的位置是什么?他们都不是。你自己说过它在/usr/lib/ocaml/,你没有包含的目录!目录不会递归搜索,您在其他问题之前就已经体验过。

我强烈建议您阅读有关编译的手册。您正在浏览的这个文档在编译方面是正确的,但是您以不同的方式设置环境,并且在您了解这些命令实际执行的操作之前,辨别差异将会令人沮丧。

相关问题