【问题标题】:How to pack module into module with the same name with ocamlopt?如何将模块打包成与ocamlopt同名的模块?
【发布时间】:2025-12-05 14:10:01
【问题描述】:

在 OCaml 中,我可以创建具有相同名称的嵌套模块的模块。

module X = struct
  module X = struct
    let x = 42
  end
end

我也可以用 ocamlc 打包它:

ocamlc -for-pack X -c X.ml

mkdir tmp
mv X.cmo tmp/X.cmo
mv X.cmi tmp/X.cmi

ocamlc -pack -o X.cmo t/X.cmo

但是当我尝试使用 ocamlopt 时,我有:

致命错误:异常堆栈溢出

make 文件运行后。

如何使用 ocamlopt 将模块打包到同名模块中?

【问题讨论】:

  • 你做不到。 ocamlopt 假设打包模块和目标模块具有不同的名称...
  • 这个案例看起来像是理论研究,但我的实际任务是代码生成和模块树构建,有时我已经打包和目标模块具有相同的名称并且无法更改此名称。跨度>
  • OCaml 4.09 中问题依然存在

标签: compilation nested ocaml stack-overflow packing


【解决方案1】:

这是 ocamlopt 中的一个错误。请向上游报告。

如果不允许将模块 X 打包到包 X 中,那么编译器应该这样说。如果它被允许,那么它应该工作。无论哪种方式,堆栈溢出都是一个错误。

【讨论】: