【问题标题】:How do I compile my OCaml code into a standalone bytecode executable?如何将我的 OCaml 代码编译成独立的字节码可执行文件?
【发布时间】:2014-12-18 13:04:56
【问题描述】:

我想将我的 OCaml 项目编译成可执行文件,该可执行文件可以在其他未安装 OCaml 的计算机上运行。使用 ocamlbuild,当我编译“.native”文件时,它可以在其他机器上正常工作,但如果我编译“.byte”文件,当我尝试运行可执行文件时,它会失败并显示 Cannot exec ocamlrun 消息。

由于我的程序的字节码版本在文件大小方面要小得多,我更愿意分发它而不是本机代码。编译时有没有办法将 ocamlrun 捆绑到可执行文件中?

【问题讨论】:

  • 我想说,如果您将 ocamlrun 与您的字节码捆绑在一起,您的程序的大小将与本机版本相当或更大。我说的对吗?
  • @AnthonyScemama:是的,结果就是这样:/

标签: ocaml


【解决方案1】:

你需要在自定义模式下编译,来自 ocamlc 用户manual:

-自定义

“自定义运行时”模式下的链接。在默认链接模式下,链接器生成旨在与 共享运行时系统,ocamlrun。在自定义运行时模式下, 链接器生成一个包含运行时系统的输出文件 和程序的字节码。生成的文件更大,但它 可以直接执行,即使没有ocamlrun命令 安装。此外,“自定义运行时”模式支持静态链接 使用用户定义的 C 函数的 OCaml 代码,如章节中所述

Unix:永远不要对 ocamlc -custom 生成的可执行文件使用 strip 命令,这会删除可执行文件的字节码部分。

如果您使用的是oasis,那么您只需将Custom : true 字段添加到您的可执行部分,类似地,对于ocamlbuild,添加-tag custom 或在_tags 中添加自定义。

【讨论】:

  • 同理,对于 ocamlbuild,添加 -tag custom 或将自定义放入 _tags
  • 感谢您的注意,不要害怕只是编辑答案,SO 是一个协作工具。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多