OCaml - компилировать код OCaml и C, который использует Ctypes

Я пытаюсь узнать, как вызывать подпрограммы в C непосредственно из кода OCaml, используя Ctypes библиотека.

У меня есть этот базовый пример с двумя файлами: 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 для компиляции своего кода, потому что это действительно легко.

1 ответ

Решение

Вот пример, который я использую на 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 на терминале.

Другие вопросы по тегам