0

尝试使用该实用程序创建.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

wherea.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我得到的文件占用的空间是手动生成的文件的十倍,更重要的是,它不起作用。两个命令都不成功utop _build/default/lib/a.cmacd _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))
4

1 回答 1

0

您需要使.a.objs/byte. 例如:

#directory ".a.objs/byte"

(这些文件像往常一样为图书馆用户安装)

另请注意,沙丘默认处于包装模式:MLib中的模块可以作为 访问,除非用户定义了与整个库Lib.M同名的入口点模块。Lib

于 2021-02-23T09:04:35.927 回答