OCaml - 编译使用 Ctypes 的 OCaml 和 C 代码

OCaml - Compile OCaml and C code that uses Ctypes

我正在尝试学习如何使用 Ctypes 库直接从 OCaml 代码调用 C 中的例程。

我有一个包含两个文件的基本示例:hello.mlhello.c

hello.ml 看起来像这样:

open Ctypes
open Foreign

let hello = 
    foreign "hello" (float @ -> returning void)
;;

let () = 
    hello 3.15
;;

hello.c 看起来像这样:

#include <stdio.h>

void hello(double x)
{
    if ( x > 0)
        printf("hello!\n");
}

如何将这两个文件编译成一个可执行文件?

手动compiling/linking代码的过程对我来说很可怕,我也不是很明白。我通常使用 Makefile 模板来编译我的代码,因为那真的很容易。

这是我在 OS X 上使用的示例。

在simple.c

int adder(int a, int b)
{
    return a + b;
}

并在 simple.ml

open Ctypes
open Foreign
let adder_ = foreign
    "adder" (int @-> int @-> returning int)

let () =
  print_endline (string_of_int (adder_ 1 2))

那我就

clang -shared simple.c -o simple.so 
ocamlfind ocamlopt -package ctypes.foreign -cclib simple.so -linkpkg simple.ml -o Test
./Test

这应该会在终端上打印出 3。