我已经安装了一些库,并且正在尝试编译代码。
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.cmi
和mlexample2.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
。
答案 0 :(得分:2)
从你的其他问题来看,似乎你有一些样本行要编译,只是盲目地走路而不理解编译选项。
1)你的编译行有-c
选项。此选项不链接,因此它允许某人编译单个模块并在以后链接它们。这有助于将项目构建为多个部分并进行更新,以便更快地进行最终编译。因此,传递给ocamlc的-c
选项会生成您的cmi
和cmo
,符合字节码的模块。
2)您在示例编译行中缺少某些内容 - 它没有提及有关生成其他文件的任何内容。我假设你也使用-c
选项。这是因为.cmx
也是一个已编译的模块,但是通过ocamlopt本地编译。
3)这应该是一个非常明显的编译错误。您所包含的目录中bigarry.cmxa
所在的位置是什么?他们都不是。你自己说过它在/usr/lib/ocaml/
,你没有包含的目录!目录不会递归搜索,您在其他问题之前就已经体验过。
我强烈建议您阅读有关编译的手册。您正在浏览的这个文档在编译方面是正确的,但是您以不同的方式设置环境,并且在您了解这些命令实际执行的操作之前,辨别差异将会令人沮丧。