我正在尝试学习如何使用Ctypes
库直接从OCaml代码调用C语言中的例程。
我有两个文件的基本示例:hello.ml
和hello.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模板来编译我的代码,因为这非常简单。
答案 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
这应该在终端上打印出来。