我可生产OCamlBuild机可执行程序可在不具有OCaml的库的计算机上运行?

Sur*_*tor 6 ocaml ocamlbuild

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

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

Mic*_*and 7

大多数OCaml代码是静态链接的.动态链接有两件事:

  • 使用字节码时的C存根库(可能是本机代码,虽然我不认为是这种情况).这些是dllfoo.so对应的libfoo.a.如果你有libfoo.a,我认为它将使用它而不是dllfoo.so本机代码.
  • 动态库依赖于运行时或存根库(例如libc,或libgtk由其使用lablgtk等).

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


Vic*_*let 3

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

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

  • 它不是动态加载的 camomile 库,而是它的许多数据文件,其中保存了各种字符映射的 unicode 映射。 (2认同)