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

时间:2015-05-29 16:10:51

标签: c ocaml interfacing

我正在尝试学习如何使用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");
}

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

手动编译/链接代码的过程对我来说是可怕的,我不太了解它。我通常使用Makefile模板来编译我的代码,因为这非常简单。

1 个答案:

答案 0 :(得分:2)

这是我在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

这应该在终端上打印出来。