OCaml has several options available to interact with non-OCaml code. The compiler can link with external system libraries via C code and also can produce standalone native object files that can be embedded within other non-OCaml applications.
The mechanism by which code in one programming language can invoke routines in a different programming language is called a foreign function interface. This chapter will:
Show how to call routines in C libraries directly from your OCaml code
Teach you how to build higher-level abstractions in OCaml from the low-level C bindings
Work through some full examples for binding a terminal interface and UNIX date/time functions
The simplest foreign function interface in OCaml doesn’t even require you to write any C code at all! The Ctypes library lets you define the C interface in pure OCaml, and the library then takes care of loading the C symbols and invoking the foreign function call.
Let’s dive straight into a realistic example to show you how the library looks. We’ll create a binding to the Ncurses terminal toolkit, as it’s widely available on most systems and doesn’t have any complex dependencies.
You’ll need to install the
libffi library as a prerequisite to
using Ctypes. It’s a fairly popular library and should be available in
your OS package manager.
A special note for Mac users: the version of
libffi installed by default in Mac OS X 10.8 is too old for some of the features that Ctypes ...