我正在使用以下命令创建一个.cma文件:
ocamlc -o ./_build/myLib.cma -a ./_build/myBtree.cmo
但是,请尽我所能,我无法使用此文件。我不断收到“错误:未绑定的模块MyLib”。
有人可以发布一个使用ocamlc的简单示例(请不要生成实用程序示例)来创建.cma文件,然后在字节码可执行文件中使用该.cma文件。
完全迷路了...
答案 0 :(得分:3)
手动创建库时,请记住,库至少有两个方面:
例如,如果库源文件包含
lib_src
|- a.ml
|- b.ml
|- c.ml
然后可以通过不公开A
来将字节码库的已编译接口限制为B
和b.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
模块。名称空间通常由构建系统本身实现。