6

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

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

4

2 回答 2

7

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

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

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

于 2010-11-13T03:26:20.830 回答
3

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

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

于 2010-11-12T20:52:02.797 回答