如何将我的OCaml代码编译为独立的字节码可执行文件?

hug*_*omg 5 ocaml

我想将我的OCaml项目编译成可执行文件,可以在没有安装OCaml的其他计算机上运行.使用ocamlbuild,当我编出".native"文件,它工作在其他机器上正常,但如果我编出".BYTE"文件,它失败,一个Cannot exec ocamlrun消息时,我尝试运行可执行文件.

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

ivg*_*ivg 7

您需要从自定义模式编译,从ocamlc用户手册:

-custom

在"自定义运行时"模式下链接.在默认链接模式下,链接器生成的字节码旨在与共享运行时系统ocamlrun一起执行.在自定义运行时模式下,链接器生成一个输出文件,其中包含运行时系统和程序的字节码.生成的文件较大,但即使未安装ocamlrun命令,也可以直接执行.此外,"自定义运行时"模式允许OCaml代码与用户定义的C函数进行静态链接,如本章所述

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

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

  • 同样,对于ocamlbuild,添加`-tag custom`或将自定义放在`_tags`中 (3认同)