首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于.cma文件的沙丘行为

关于.cma文件的沙丘行为
EN

Stack Overflow用户
提问于 2021-02-22 23:22:26
回答 1查看 144关注 0票数 0

在尝试使用.cma实用程序创建dune文件(库)时,我遇到了一些问题。我有以下项目树:

代码语言:javascript
复制
.
├── _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时,我可以按需要执行以下命令:

代码语言:javascript
复制
utop # A.f;;
- : int -> int = <fun>

另一方面,在使用dune build (它生成_build目录及其子目录)之后,我得到的_build/default/lib/a.cma文件占用的空间是手动生成的文件的10倍,更重要的是,无法工作。两个命令utop _build/default/lib/a.cmacd _build/default/lib; utop a.cma都是不可成功的,我无法使用模块A

代码语言:javascript
复制
utop # A.f;;
Line 1, characters 0-3:
Error: Unbound module A

我知道dune utop命令,但是如果我想在没有安装dune的其他地方导出/共享我的库呢?我该怎么做?我是不是用错了dune?提前谢谢你

PS:文件内容:

库/沙丘

代码语言:javascript
复制
(library
 (name a))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-23 09:04:35

您需要在.a.objs/byte中显示字节码对象文件。例如:

代码语言:javascript
复制
#directory ".a.objs/byte"

(这些文件是为库用户正常安装的)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66324865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档