在您的系统上安装某些东西并不会使其对编译器自动可见,这不仅适用于 OCaml,而且适用于大多数传统系统,例如 C 或 C++ 等等。
这意味着您需要将一些标志传递给编译器,或者编写 Makefile,或者使用一些项目管理系统。
在 OCaml 中,我们有一个相当成熟的基础设施,opam
特别是可以很好地配合。我不想深入解释,只是快速概述。
ocamlfind
工具用于在您的系统上查找库。它在想法上有些接近pkg-config
,但在设计上却大不相同。它包装了编译器工具,以便将选项传递给它们。
ocamlbuild
是一把精美的瑞士刀,是每个 OCamler 武器库中必备的。它是一个了解所有其他工具以及如何将它们粘合在一起的工具。我想说这是编译项目的首选方式,尤其是小型项目。
oasis
在精神上接近autotools
,但不是那么通用,并且是在前提下编写的,它应该非常易于使用。确实它非常简单,但仍然非常灵活和强大。
考虑到这个概述,我们可以直接解决您的问题。所以你已经安装了 ctypes。现在让我们从这个角度看一下ctypes
包在您的系统中是如何可见的。ocamlfind
最简单的方法是列出所有可见ocamlfind
并在ctypes
那里找到的包:
$ ocamlfind list | grep ctypes
ctypes (version: 0.4.1)
ctypes.foreign (version: 0.4.1)
ctypes.stubs (version: 0.4.1)
ctypes.top (version: 0.4.1)
所以,看起来,在 ctypes 保护伞下有 4 个库。一个基本库和一些额外的库,提供一些默认情况下不需要的功能。
不,让我们尝试将它们与ocamlbuild
ocamlbuild -package ctypes yourprogram.native
或者,不ocamlbuild
直接使用ocamlfind
:
ocamlfind ocamlopt -package ctypes yourprogram.ml -o yourprogram.native
如您所见,有一个package
选项,您可以将通过找到的包的名称传递给该选项,ocamlfind
它会自动对编译器可见。