gpt4 book ai didi

ocaml - 是否有理由保留 .cmo 或仅保留 .cma?

转载 作者:行者123 更新时间:2023-12-05 00:36:03 25 4
gpt4 key购买 nike

说,我有 mylibrary.mllibrary.c 提供包装我想进行字节码编译并提供mylibrary.ml作为其他 ocaml 代码的库。将其编译为字节码(我不考虑在这里将 ocaml 编译为 native 代码)会产生许多文件,我想知道是否有任何理由保留它们?还是将它们全部提供给图书馆的其他用户?

我(到目前为止)知道我需要字节码库对象 mylibrary.cma这样我就可以在 ocaml 顶层使用 mylibrary 作为

ocaml mylibrary.cma

或者我可以
#load "mylibrary.cma";;

来自 ocaml 脚本。然后也是编译界面 mylibrary.cmi ,以及 dllmylibrary.so (其中包含代码的 C 部分)是上述工作所必需的。以及未编译的接口(interface)定义文件 mylibrary.mli很高兴保留用于文档目的。

但是是否有任何理由也保留 mylibrary.cmo文件,如果我有 mylibrary.cma文件?在什么样的情况下,有人也想拥有它?

编辑:我的意思是,我需要构建 .cmo在 makefile 中,然后使用它来构造 .cma ,但我想删除 .cmo在此之后,保持目录稍微干净。

最佳答案

因此,显然不同文件的目的是(当将其限制为字节码编译器时):
mylibrary.mli - 人类可读的接口(interface)定义(不是严格需要,编译器只需要.cmi)mylibrary.cmi - 编译接口(interface),编译调用 mylibrary 的代码时需要library.o -C 目标文件dlllibrary.so - 由 .o 组成的共享库对象dlllibrary.a - 由 .o 组成的静态库对象mylibrary.cmo - 从 mylibrary.ml 编译的字节码对象mylibrary.cma - 字节码库

然后,mylibrary.cma (使用 mylibrary.cmidlllibrary.so )从顶层加载 mylibrary 时需要:
#load "mylibrary.cma";;
或者

可以编译一个与 mylibrary.cma 动态链接的字节码程序。 (mylibrary.cmidlllibrary.so 也需要):
ocamlc mylibrary.cma <program>.ml
或者

动态链接字节码对象,而不是字节码库(需要的文件:mylibrary.cmomylibrary.cmidlllibrary.so):
ocamlc dlllibrary.so mylibrary.cmo <program>.ml
(注意:然后使用 ocamlrun -I . <program> 运行字节码,假设 dlllibrary.so 在当前目录中。)

或者

与对象静态链接(所需文件:mylibrary.cmomylibrary.cmiliblibrary.a)
ocamlc -custom liblibrary.a mylibrary.cmo <program>.ml
或者

与库对象静态链接(所需文件:mylibrary.cmamylibrary.cmiliblibrary.a)
ocamlc -custom -I . mylibrary.cma <program>.ml
因此,根据将来如何使用该库,需要不同的文件。除了 .mli只有人类读者需要,目标文件.o不需要从 C 库编译(但在某些情况下编译为 native 代码时需要)。

关于ocaml - 是否有理由保留 .cmo 或仅保留 .cma?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com