我想将我的OCaml项目编译成可执行文件,可以在没有安装OCaml的其他计算机上运行。使用ocamlbuild,当我编译一个“.native”文件时,它在其他机器上工作正常,但是如果我编译一个“.byte”文件,当我尝试运行可执行文件时,它会失败,并显示Cannot exec ocamlrun
消息。
由于我的程序的字节码版本在文件大小方面明显较小,我宁愿分发它而不是本机代码。有没有办法在编译时将ocamlrun捆绑到可执行文件中?
答案 0 :(得分:7)
您需要从ocamlc用户manual自定义模式进行编译:
-custom
“自定义运行时”模式下的链接。在默认链接模式下,链接器生成用于执行的字节码 共享运行时系统,ocamlrun。在自定义运行时模式下, 链接器生成包含运行时系统的输出文件 和程序的字节码。生成的文件更大,但它 即使ocamlrun命令不是,也可以直接执行 安装。此外,“自定义运行时”模式启用静态链接 具有用户定义的C函数的OCaml代码,如
章节所述Unix:永远不要对ocamlc -custom生成的可执行文件使用strip命令,这会删除可执行文件的字节码部分。
如果您正在使用oasis
,那么您需要的只是将Custom : true
字段添加到可执行部分,类似地,对于ocamlbuild
,添加-tag custom
或将自定义放入_tags
。