如何创建和使用.cma文件?

时间:2018-11-17 20:14:14

标签: ocaml

我正在使用以下命令创建一个.cma文件:

ocamlc -o ./_build/myLib.cma -a ./_build/myBtree.cmo

但是,请尽我所能,我无法使用此文件。我不断收到“错误:未绑定的模块MyLib”。

有人可以发布一个使用ocamlc的简单示例(请不要生成实用程序示例)来创建.cma文件,然后在字节码可执行文件中使用该.cma文件。

完全迷路了...

1 个答案:

答案 0 :(得分:3)

手动创建库时,请记住,库至少有两个方面:

  • 由库的cm(x)a文件处理的实现方面
  • 接口端,对于该库公开的每个公共模块,都应包含一个cmi文件。

例如,如果库源文件包含

lib_src
  |- a.ml
  |- b.ml
  |- c.ml

然后可以通过不公开A来将字节码库的已编译接口限制为Bb.cmi。因此,可能只有一个包含以下文件的编译库:

lib
  |- a.cmi
  |- c.cmi
  |- lib.cma

此时,编译依赖于库的模块User

(* user.ml *)
printf "%d" A.x

既需要链接归档文件lib.cma,还需要用cmi指示-I文件的位置:

     ocamlc -I lib lib.cma user.ml

第二个值得注意的点是cma文件只是一组cmo文件。它本身不实现任何类型的命名空间。因此,Lib没有引入lib.cma模块。名称空间通常由构建系统本身实现。