我可以使用OCamlBuild生成本机可执行文件,它可以在没有OCaml库的计算机上运行吗?

时间:2010-11-12 19:40:14

标签: ocaml ocamlbuild

我有一个大型OCaml项目,我正在使用ocamlbuild进行编译。一切正常,我有一个伟大的可执行文件,可以按我的意愿完成任务。问题是,当我把原生可执行文件“my_prog.n​​ative”运行到其他地方(不同的机器有相同的操作系统等)时,新机器抱怨它找不到洋甘菊(用于电池)库我正在使用)。我认为我们从ocamlbuild获得的可执行文件是独立的,并且不需要OCaml或Camomile存在于我们运行它的机器中,但似乎并非如此。

关于如何制作真正独立的可执行文件的任何想法?

2 个答案:

答案 0 :(得分:7)

大多数OCaml代码都是静态链接的。有两件事是动态联系的:

  • 使用字节码时的C存根库(可能是本机代码,但我不认为是这种情况)。这些是dllfoo.so,对应libfoo.a。如果您有libfoo.a,我认为它会使用{而不是dllfoo.so作为本机代码。
  • 动态库取决于运行时或存根库(例如libc使用的libgtklablgtk等)。

此外,Camomile会动态加载一些Unicode数据,这是一种不属于标准OCaml链接的特殊情况。您必须查阅Camomile文档以找到静态嵌入该数据的方法。

答案 1 :(得分:3)

据我所知,Camomile是在运行时动态加载的,因此最简单的方法是提供DLL /共享对象以及可执行文件。

您可以尝试强制使用静态链接,但这会使用LGPL许可证污染您的应用程序。