在尝试使用.cma实用程序创建dune文件(库)时,我遇到了一些问题。我有以下项目树:
.
├── _build
│ ├── default
│ │ ├── dune
│ │ └── lib
│ │ ├── a.a
│ │ ├── a.cma
│ │ ├── a.cmxa
│ │ ├── a.cmxs
│ │ ├── a.ml
│ │ └── dune
│ └── log
├── dune
├── dune-project
└── lib
├── a.ml
└── dune其中a.ml声明了一个非常简单的函数f,举个例子。当我直接运行ocamlc -o a.cma -a a.ml,然后触发utop a.cma时,我可以按需要执行以下命令:
utop # A.f;;
- : int -> int = <fun>另一方面,在使用dune build (它生成_build目录及其子目录)之后,我得到的_build/default/lib/a.cma文件占用的空间是手动生成的文件的10倍,更重要的是,无法工作。两个命令utop _build/default/lib/a.cma和cd _build/default/lib; utop a.cma都是不可成功的,我无法使用模块A。
utop # A.f;;
Line 1, characters 0-3:
Error: Unbound module A我知道dune utop命令,但是如果我想在没有安装dune的其他地方导出/共享我的库呢?我该怎么做?我是不是用错了dune?提前谢谢你
PS:文件内容:
库/沙丘
(library
(name a))发布于 2021-02-23 09:04:35
您需要在.a.objs/byte中显示字节码对象文件。例如:
#directory ".a.objs/byte"(这些文件是为库用户正常安装的)
还请注意,沙丘默认为包装模式:库Lib中的模块Lib.M可以作为Lib.M访问,除非用户定义一个入口点模块,其名称与整个库的名称Lib相同。
https://stackoverflow.com/questions/66324865
复制相似问题