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