2

我正在尝试学习如何使用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 模板来编译我的代码,因为这真的很简单。

4

1 回答 1

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

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

于 2015-05-29T16:57:27.167 回答