Ocaml / ReasonML - 构建的可执行文件中缺少库

Ocaml / ReasonML - Missing libraries in built executable

我有一个使用 dune build 构建可执行文件的 ReasonML 项目。可执行文件在开发 machine(构建代码的地方)上运行没有任何问题。但是,如果我将此 exe 复制到我的另一台笔记本电脑(具有相同 OSX 版本的另一台 mac),由于缺少库,我无法执行该文件:

dyld: Library not loaded: /usr/local/opt/gmp/lib/libgmp.10.dylib
  Referenced from: /usr/local/bin/foo
  Reason: image not found

我对 ocaml / reason 不是很有经验,但我希望可执行文件将所有必要的依赖项捆绑在二进制文件中。

为了包含所有必要的库,除了 dune build 之外,我是否必须执行特殊的构建标志或其他一些步骤?

您正在寻找的是静态链接二进制文件。遗憾的是,MacOS 官方不鼓励或推荐静态链接。可以找到一个旧页面 here. You might find this Whosebug answer 也很有用。

这与 OCaml 本身关系不大,更多的是链接器在不同平台(MacOS、Linux 等)上的行为方式

要解决您的问题,您可以检查 esy-gmp assuming you are using esy as your package manager. If you're on OPAM, you could add conf-gmp 到您的 opam 依赖项

综上所述,如果您对 Linux(我猜 Windows 等支持平台上的静态链接感兴趣?),您必须通过以下方式提供 C 链接器标志沙丘

(link_flags (-ccopt -static))