首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非绑定模块Png - Png.load

非绑定模块Png - Png.load
EN

Stack Overflow用户
提问于 2019-11-26 22:35:39
回答 1查看 456关注 0票数 0

我目前正在尝试将png图像文件加载到OCaml中。我试图使用Png.load函数,但当我使用它时,OCaml给出了错误:

未绑定模块Png merlin。

我下载了CamlImages。我在用

  • OCaml版本4.08.1
  • 整车5.0.1版和我在上
  • macOS Catalina版本10.15.1

我真的很感激任何人能给我的任何帮助或信息。几周来我一直在努力解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2019-11-27 14:37:18

要在OCaml中使用包,必须执行两个操作:

  1. 安装软件包
  2. 告诉您的构建系统使用包。

这是一个一般的指导方针,细节可能会有所不同,因为OCaml是一个成熟的系统,有许多可供选择的选项,有许多包管理器和大量的构建系统。我将从最常见的开始。

安装一个软件包

欧帕姆

如果您使用的是OCaml包管理器(欧帕姆),那么您可以使用opam install <pkgname>安装您的软件包,例如,

代码语言:javascript
复制
opam install camlimages

别忘了激活opam

代码语言:javascript
复制
eval $(opam env)

当opam在本地安装软件包时,您需要正确地设置环境,以便您的构建系统能够看到它。这就是eval $(opam env)正在做的事情。

带包裹的建筑物

基于ocamlbuild的建筑

OCamlBuild是值得尊敬的,但仍然退出了构建OCaml程序的流行工具。这是非常容易使用,不问太多的问题。不过,对于大型项目来说,它的规模并不大。如果您的应用程序主文件是app.ml,则构建命令非常简单

代码语言:javascript
复制
ocamlbuild -pkg camlimages.all app.native

该命令将自动扫描本地依赖项并构建它们,并将应用程序与camlimages包链接。您可以使用-pkgs标志添加更多包,例如,

代码语言:javascript
复制
ocamlbuild -pkgs camlimages.all,core_kernel app.native

由于OCamlBuild正在扫描文件夹中的文件,因此应该为每个新文件夹创建一个新文件夹。OCamlBuild不喜欢文件夹中的任何剩余文件或垃圾文件。它甚至可能会抱怨它们,并创建一个脚本来删除它们。

配置Merlin

Merlin是一个自己的构建系统,所以它也需要一些设置。最简单的方法是在项目的顶部文件夹中创建一个.merlin文件,并为要使用的每个包添加一行PKG <pkgname>,例如,

代码语言:javascript
复制
 PKG camlimages.all

包与库

在OCaml中,包是库的集合。通常,构成包的库的名称可能与包的名称不同。这通常会引起很多混乱。在凸轮的例子中,我们有一个包camlimages,它有很多库,例如,

代码语言:javascript
复制
$ ocamlfind list | grep camlimages
camlimages          (version: 4.2.6)
camlimages.all      (version: 4.2.6)
camlimages.all_formats (version: 4.2.6)
camlimages.core     (version: 5.0.1)
camlimages.exif     (version: 5.0.1)
camlimages.freetype (version: 5.0.1)
camlimages.gif      (version: 5.0.1)
camlimages.graphics (version: 5.0.1)
camlimages.jpeg     (version: 5.0.1)
camlimages.png      (version: 5.0.1)
camlimages.tiff     (version: 5.0.1)
camlimages.xpm      (version: 5.0.1)

为了找出这些子库之间的依赖关系,您可以读取描述包的元文件,使用下面的命令可以很容易地找到它

代码语言:javascript
复制
less $(ocamlfind query camlimages)/META

我建议使用camlimages.all,但是如果它抱怨,您可以选择适合您的设置的子集。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59060382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档