0

dune build我有一个用于构建可执行文件的 ReasonML 项目。可执行文件在开发机器(构建代码的地方)上运行,没有任何问题。但是,如果我将此 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除了包含所有必要的库之外,是否有一个特殊的构建标志或其他一些我必须执行的步骤?

4

1 回答 1

2

您正在寻找的是静态链接二进制文件。不幸的是,MacOS 官方并不鼓励或推荐静态链接。可以在此处找到旧页面。您可能会发现这个 Stackoverflow 答案也很有用。

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

为了解决您的问题,您可以检查esy-gmp假设您使用esy作为包管理器。如果您使用的是 OPAM,则可以将conf-gmp添加到您的 opam 依赖项中

话虽如此,如果您对 Linux 等受支持平台上的静态链接感兴趣(我猜也是 Windows?),您必须通过 dune 提供 C 链接器标志

(link_flags (-ccopt -static))
于 2020-01-27T14:58:09.893 回答