我是否可以使用OCamlBuild生成本机可执行文件,该文件可以在没有';你没有OCaml库吗?

我是否可以使用OCamlBuild生成本机可执行文件,该文件可以在没有';你没有OCaml库吗?,ocaml,ocamlbuild,Ocaml,Ocamlbuild,我有一个大型的OCaml项目,我正在使用ocamlbuild进行编译。一切都很好,我有一个伟大的可执行文件,它做我想做的一切。问题是,当我将本机可执行文件“my_prog.native”放在其他地方运行(使用相同操作系统的不同机器,等等)时,新机器会抱怨它找不到甘菊(在我使用的电池库中使用)。我认为我们从ocamlbuild获得的可执行文件是独立的,不需要OCaml或cammile出现在我们运行它的机器中,但事实似乎并非如此 关于如何生成真正独立的可执行文件有什么想法吗?据我所知,Camomil

我有一个大型的OCaml项目,我正在使用ocamlbuild进行编译。一切都很好,我有一个伟大的可执行文件,它做我想做的一切。问题是,当我将本机可执行文件“my_prog.native”放在其他地方运行(使用相同操作系统的不同机器,等等)时,新机器会抱怨它找不到甘菊(在我使用的电池库中使用)。我认为我们从ocamlbuild获得的可执行文件是独立的,不需要OCaml或cammile出现在我们运行它的机器中,但事实似乎并非如此


关于如何生成真正独立的可执行文件有什么想法吗?

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


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

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

  • 在使用字节码(可能还有本机代码,尽管我不认为是这样)时使用C存根库。它们是
    dllfoo.so
    ,对应于
    libfoo.a
    。如果您有一个
    libfoo.a
    ,我认为它将使用它而不是
    dllfoo.so
    作为本机代码
  • 动态库取决于运行库或存根库(例如
    libc
    ,或
    lablgtk
    使用的
    libgtk
    ,等等)

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

感谢您的回复。我怎么知道是哪个。所以我需要提供我的可执行文件?如果我选择静态链接,如何强制静态链接?谢谢动态加载的不是camomile库,而是它的许多数据文件,其中包含各种字符映射的unicode映射。