OCaml - 编译使用 Ctypes 的 OCaml 和 C 代码
OCaml - Compile OCaml and C code that uses Ctypes
我正在尝试学习如何使用 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");
}
如何将这两个文件编译成一个可执行文件?
手动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。
我正在尝试学习如何使用 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");
}
如何将这两个文件编译成一个可执行文件?
手动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。