我有一个大型OCaml项目,我正在使用ocamlbuild进行编译。一切正常,我有一个伟大的可执行文件,可以按我的意愿完成任务。问题是,当我把原生可执行文件“my_prog.native”运行到其他地方(不同的机器有相同的操作系统等)时,新机器抱怨它找不到洋甘菊(用于电池)库我正在使用)。我认为我们从ocamlbuild获得的可执行文件是独立的,并且不需要OCaml或Camomile存在于我们运行它的机器中,但似乎并非如此。
关于如何制作真正独立的可执行文件的任何想法?
答案 0 :(得分:7)
大多数OCaml代码都是静态链接的。有两件事是动态联系的:
dllfoo.so
,对应libfoo.a
。如果您有libfoo.a
,我认为它会使用{而不是dllfoo.so
作为本机代码。libc
使用的libgtk
或lablgtk
等)。此外,Camomile会动态加载一些Unicode数据,这是一种不属于标准OCaml链接的特殊情况。您必须查阅Camomile文档以找到静态嵌入该数据的方法。
答案 1 :(得分:3)
据我所知,Camomile是在运行时动态加载的,因此最简单的方法是提供DLL /共享对象以及可执行文件。
您可以尝试强制使用静态链接,但这会使用LGPL许可证污染您的应用程序。