Ocaml/ReasonML-内置可执行文件中缺少库

Ocaml/ReasonML-内置可执行文件中缺少库,ocaml,reason,ocaml-dune,Ocaml,Reason,Ocaml Dune,我有一个ReasonML项目,它使用dune build构建一个可执行文件。可执行文件在开发机器(代码生成的地方)上运行,没有任何问题。但是,如果我将此exe复制到我的其他笔记本电脑(另一台具有相同OSX版本的mac电脑),我将无法执行该文件,因为缺少库: dyld: Library not loaded: /usr/local/opt/gmp/lib/libgmp.10.dylib Referenced from: /usr/local/bin/foo Reason: image no

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

您要寻找的是静态链接二进制文件。不幸的是,MacOS官方并不鼓励或推荐静态链接。可以找到一个旧页面。你可能也会觉得有用

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

为了解决您的问题,您可以假设您使用的是包管理器。如果您使用的是OPAM,则可以添加OPAM依赖项

综上所述,如果您对Linux(我想也是Windows?)等受支持平台上的静态链接感兴趣,那么您必须通过dune提供C链接器标志

(链接标志(-ccopt-静态))

您需要的是静态链接二进制文件。不幸的是,MacOS官方并不鼓励或推荐静态链接。可以找到一个旧页面。你可能也会觉得有用

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

为了解决您的问题,您可以假设您使用的是包管理器。如果您使用的是OPAM,则可以添加OPAM依赖项

综上所述,如果您对Linux(我想也是Windows?)等受支持平台上的静态链接感兴趣,那么您必须通过dune提供C链接器标志

(链接标志(-ccopt-静态))

如果您正在构建后端服务,请记住,您通常会对其进行Dockerize以部署它。因此,图书馆链接成为一个不存在的问题。如果您正在构建要分发给用户的CLI,那么您需要解决链接问题:-)如果您正在构建后端服务,请记住,您通常会将其Dockerize以部署它。因此,图书馆链接成为一个不存在的问题。如果您正在构建一个CLI以分发给用户,那么您需要解决链接问题:-)